Array24. Дан целочисленный массив размера $$N$$, не содержащий одинаковых чисел. Проверить, образуют ли его элементы арифметическую прогрессию (см. задание Array3). Если образуют, то вывести разность прогрессии, если нет — вывести $$0$$.
Решение, редакция vombat:
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 |
#include <stdio.h> int main(void) { int a[10]; int n; printf("N: "); scanf("%i",&n); int i; for (i=0; i<n; ++i){ printf("a[%i] : ",i+1); scanf("%i",&a[i]); } int r=a[1]-a[0]; for (i=1; i<n && r!=0; ++i) { if (r!=a[i]-a[i-1]) { r=0; } } printf("%i\n: ",r); return 0; } |
Другие задачи из раздела Array можно посмотреть здесь.
const int array_size = 5;
int array[array_size] = { 10, 12, 14, 16, 18 };
bool progress = true;
int d = array[1] — array[0];
for (int i = 2; i < array_size; i++)
{
if (array[i] — array[i — 1] != d)
{
progress = false;
break;
}
}
if (!progress) cout << 0 << endl;
else cout << d << endl;
Антон, возможно имеет смысл досрочно завершить второй цикл (сократить количество итераций), как только очередной элемент прерывает прогрессию:
Можно, но я не люблю break в for`е. И я бы тогда заменял это всё на while.
Совершенно не обязательно использовать break, можно просто немного изменить условие завершения цикла.
Было:
Стало:
Эх, перепутал языки программированния, мы же про C говорим. 🙂
Поменял, как вы сказали.