Cerința
Un șir de numere este o progresie aritmetică de rație r
dacă oricare termen al său, cu excepția primului, se obține din cel care îl precede, prin adunarea la acesta a numărului r
. Exemplu: șirul 12, 14, 16, 18, 20
este o progresie de rație 2
.
Se dă un șir de cel mult 10
6
numere naturale din intervalul [0,10
3
]
. Se cere să se verifice dacă există un număr natural r
, astfel încât toate numerele distincte din șir să poată fi rearanjate, pentru a forma o progresie aritmetică de rație r
. Se afișează numărul r
, sau mesajul NU
, dacă nu există un astfel de număr.
Date de intrare
Fișierul de intrare progresie3.in
conține cel mult 10
6
numere naturale din intervalul [0,10
3
]
, separate prin spații.
Date de ieșire
Fișierul de ieșire progresie3.out
va conține pe prima linie numărul r
, sau mesajul NU
, dacă nu există un astfel de număr.
Restricții și precizări
- în șirul dat există cel puțin două valori distincte
- proiectați un algoritm eficient din punctul de vedere al timpului de executare.
Exemplu
progresie3.in
180 30 80 280 130 330 230 30 30 330 80
progresie3.out
50
#include <bits/stdc++.h> using namespace std; ifstream cin("progresie3.in"); ofstream cout("progresie3.out"); int f[1001] , a[1001] , p = 1; int main() { int x; while(cin >> x) f[x]=1; for(int i = 1 ; i <= 1000 ; ++i) if(f[i]) a[p]=i , p++; p--; bool ok = true; int r = a[2]-a[1]; for(int i = 3 ; i <= p ; ++i) if(a[i]-a[i-1] != r) ok=false; if(ok) cout << r; else cout << "NU"; return 0; }