Array42. Дано число $$R$$ и массив размера $$N$$. Найти два соседних элемента массива, сумма которых наиболее близка к числу $$R$$, и вывести эти элементы в порядке возрастания их индексов (определение наиболее близких чисел дано в задании Array40).
Решение от Дмитрия:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# include <iostream> # include <windows.h> # include <cmath> # include <iomanip> # include <fstream> # include "arraydouble.h" using namespace std; int main () { SetConsoleCP(1251); SetConsoleOutputCP(1251); int NMAX = 100; double a[NMAX]; int n = inputArray (a, NMAX, "Array42.txt"); cout <<"Дан массив: "; showArray (a, n); int i1=0; // индекс 1-го искомого элемента int i2=1; // индекс 2-го искомого элемента double R; cout << "Введите R: " ; cin >> R; for (int i = 2; i < n; i++) { if (abs(R-(a[i]+a[i-1])) < abs(R-(a[i1]+a[i2]))) { i2=i; i1=i-1; } } cout << "Два соседних элемента массива, сумма которых наиболее близка к числу R : "; cout << a[i1] << "," << a[i2] << endl; system("pause"); return 0; } |
arraydouble.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
/* Библиотека работы с массивами */ # include <iostream> # include <fstream> using namespace std; int inputArray (double a[], int nmax, const char* name) { ifstream in (name); int n = 0; // Количество элементов while (n < nmax && in >> a[n]) {++n;} in.close(); return n; } void showArray (const double a[], int n) { for (int i = 0; i < n; ++i) { cout << a[i] << " "; } cout << endl; } |
Array42.txt
1 |
1.5 2.9 1 2 -3 -9 0 0 1 5 3 |
Другие задачи из раздела Array можно посмотреть здесь.
Комментарии: