fferum

анна3

May 30th, 2020
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.52 KB | None | 0 0
  1. #include<locale.h>
  2. #include <ctime>
  3. #include <cstdio> // подключаем все необходимые заголовочные файлы
  4. #include<stdlib.h>
  5. #include<cstdlib>
  6. #include<iostream>
  7. using namespace std; // чтобы не прописывать std
  8. int random(const double a, const double b) // функция принимающая 2 переменные типа double и осуществляющая генерацию "рандомного числа"
  9. {
  10. double rnd = double(rand()) / RAND_MAX;
  11. double m = a + (b - a) * rnd;
  12. if (m < 0) m = -m;
  13. return m;
  14. }
  15.  
  16. int NOD(int n1, int n2) // функция принимающая 2 числа и вычисляющая их НОД
  17. {
  18. if (n1 < 0) n1 = -n1;
  19. int div = n1;
  20. for (int i = 0; i < n1; ++i)
  21. {
  22. if ((n1 % div == 0) && (n2 % div == 0))
  23. {
  24. break;
  25. }
  26. div = div - 1;
  27.  
  28. }
  29. return div;
  30. }
  31. int main() { // основная функция main
  32. setlocale(LC_ALL, "Russian"); //Добавляем возможность использования русского языка
  33. srand(time(nullptr));
  34. const int the_length_of_the_array = 37; //обьявляем и инициализируем константу (размер нужного массива)
  35. int data_array[the_length_of_the_array]; //создаем массив размера заданного в константе описанной выше
  36. int answer = 0; // обьявляем и инициализируем переменную типа integer для хранения результата выбора (ввода самостоятельно или автоматической генерации)
  37. srand(time(NULL)); //Генерирует случайное число, используя текущею дату, как параметр, как бы для непредсказуемости результата
  38. printf("Хотите сами вести числа в массив? если да напишите \"1\", если нет то любое другое число\n"); // выводит сообщение
  39. scanf_s("%d", &answer); // записываем полученный результат в переменную answer
  40. if (answer == 1) { // Если пользователь вводит 1 запускаем цикл для заполнения массива с клавиатуры
  41. for (int i = 0; i < the_length_of_the_array; ++i) {
  42. printf("\nA[%d]=", i + 1);
  43. scanf_s("%d", &data_array[i]);
  44. }
  45.  
  46. }
  47. else { // в случае ввода любого другого числа , массив заполняется автоматически
  48. for (int i = 0; i < the_length_of_the_array; ++i) {
  49. data_array[i] = random(-1000, 1000);
  50. printf("\nA[%d]=", i + 1);
  51. printf("%d ", data_array[i]);
  52. }
  53.  
  54. }
  55. int index_of_the_first; //обьявляем переменные типа int для дальнейшего использования в программе
  56. int index_of_the_second;
  57. int index_of_the_third;
  58. int the_first_value;
  59. int second_value;
  60. int third_number;
  61. int min_NOD = 10000;
  62. for (int i = 0; i < the_length_of_the_array - 2; ++i) // проходим по всему массиву , но т.к. мы храним сразу 3 числа , чтобы не выйти за размерность массива мы уменьшаем количество проходов на 2
  63. {
  64.  
  65. int the_first_value = data_array[i];
  66. int second_value = data_array[i + 1];
  67. int third_number = data_array[i + 2];
  68. if (NOD(NOD(the_first_value, second_value), third_number) < min_NOD) { // сравниваем с минимальным НОД и если НОД текущих чисел меньше , присваем минимальному текущий
  69. min_NOD = NOD(NOD(the_first_value, second_value), third_number);
  70. index_of_the_first = i + 1;
  71. index_of_the_second = i + 2;
  72. index_of_the_third = i + 3;
  73.  
  74. }
  75. }
  76.  
  77. printf("\n(индекс первого числа в паре=%d\n", index_of_the_first); // Выводим получивщиеся результаты
  78. printf("значение первого числа в паре=%d\n", data_array[index_of_the_first - 1]);
  79. printf("индекс второго числа в паре=%d\n", index_of_the_second);
  80. printf("значени первого числа в паре=%d\n", data_array[index_of_the_second - 1]);
  81. printf("индекс третьего числа в паре=%d\n", index_of_the_third);
  82. printf("значени третьего числа в паре=%d)\n", data_array[index_of_the_third - 1]);
  83. printf("НОД чисел =%d)\n\n\n", min_NOD);
  84.  
  85.  
  86. }
Add Comment
Please, Sign In to add comment