Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<locale.h>
- #include <ctime>
- #include <cstdio> // подключаем все необходимые заголовочные файлы
- #include<stdlib.h>
- #include<cstdlib>
- #include<iostream>
- using namespace std; // чтобы не прописывать std
- int random(const double a, const double b) // функция принимающая 2 переменные типа double и осуществляющая генерацию "рандомного числа"
- {
- double rnd = double(rand()) / RAND_MAX;
- double m = a + (b - a) * rnd;
- if (m < 0) m = -m;
- return m;
- }
- int NOD(int n1, int n2) // функция принимающая 2 числа и вычисляющая их НОД
- {
- if (n1 < 0) n1 = -n1;
- int div = n1;
- for (int i = 0; i < n1; ++i)
- {
- if ((n1 % div == 0) && (n2 % div == 0))
- {
- break;
- }
- div = div - 1;
- }
- return div;
- }
- int main() { // основная функция main
- setlocale(LC_ALL, "Russian"); //Добавляем возможность использования русского языка
- srand(time(nullptr));
- const int the_length_of_the_array = 37; //обьявляем и инициализируем константу (размер нужного массива)
- int data_array[the_length_of_the_array]; //создаем массив размера заданного в константе описанной выше
- int answer = 0; // обьявляем и инициализируем переменную типа integer для хранения результата выбора (ввода самостоятельно или автоматической генерации)
- srand(time(NULL)); //Генерирует случайное число, используя текущею дату, как параметр, как бы для непредсказуемости результата
- printf("Хотите сами вести числа в массив? если да напишите \"1\", если нет то любое другое число\n"); // выводит сообщение
- scanf_s("%d", &answer); // записываем полученный результат в переменную answer
- if (answer == 1) { // Если пользователь вводит 1 запускаем цикл для заполнения массива с клавиатуры
- for (int i = 0; i < the_length_of_the_array; ++i) {
- printf("\nA[%d]=", i + 1);
- scanf_s("%d", &data_array[i]);
- }
- }
- else { // в случае ввода любого другого числа , массив заполняется автоматически
- for (int i = 0; i < the_length_of_the_array; ++i) {
- data_array[i] = random(-1000, 1000);
- printf("\nA[%d]=", i + 1);
- printf("%d ", data_array[i]);
- }
- }
- int index_of_the_first; //обьявляем переменные типа int для дальнейшего использования в программе
- int index_of_the_second;
- int index_of_the_third;
- int the_first_value;
- int second_value;
- int third_number;
- int min_NOD = 10000;
- for (int i = 0; i < the_length_of_the_array - 2; ++i) // проходим по всему массиву , но т.к. мы храним сразу 3 числа , чтобы не выйти за размерность массива мы уменьшаем количество проходов на 2
- {
- int the_first_value = data_array[i];
- int second_value = data_array[i + 1];
- int third_number = data_array[i + 2];
- if (NOD(NOD(the_first_value, second_value), third_number) < min_NOD) { // сравниваем с минимальным НОД и если НОД текущих чисел меньше , присваем минимальному текущий
- min_NOD = NOD(NOD(the_first_value, second_value), third_number);
- index_of_the_first = i + 1;
- index_of_the_second = i + 2;
- index_of_the_third = i + 3;
- }
- }
- printf("\n(индекс первого числа в паре=%d\n", index_of_the_first); // Выводим получивщиеся результаты
- printf("значение первого числа в паре=%d\n", data_array[index_of_the_first - 1]);
- printf("индекс второго числа в паре=%d\n", index_of_the_second);
- printf("значени первого числа в паре=%d\n", data_array[index_of_the_second - 1]);
- printf("индекс третьего числа в паре=%d\n", index_of_the_third);
- printf("значени третьего числа в паре=%d)\n", data_array[index_of_the_third - 1]);
- printf("НОД чисел =%d)\n\n\n", min_NOD);
- }
Add Comment
Please, Sign In to add comment