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
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Progresie3:
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("progresie3.in");
ofstream fout("progresie3.out");
int v[1001];
int main(){
int x, y, r, ok = 1;
while(fin >> x)
v[x] = 1;
x = 0;
while(v[x] == 0)
x ++;
y = x + 1;
while(v[y] == 0)
y ++;
r = y - x;
x= y;
for(int i = y + 1; i <= 1000 ; i ++)
if(v[i] == 1)
{
if(i - x != r)
ok = 0;
x = i;
}
if(ok)
fout << r;
else
fout << "NU";
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2812 Progresie3
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2812 Progresie3 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!