Hidden Number
Rezolvarea problemei Hidden Number de pe site pbinfo cu explicatii:
Cerința
Se citesc din fișier numere naturale. Determinați un număr x
astfel încât dacă scădem din x
pe rând fiecare număr citit atunci suma diferențelor să fie 0
. Se va afișa numărul determinat sau -1
, dacă un astfel de număr nu există.
Date de intrare
Fișierul de intrare `hidden_number.in
` conține pe prima linie șirul de numere naturale separate prin spații.
Date de ieșire
Fișierul de ieșire `hidden_number.out
` va conține pe prima linie numărul x
sau -1
conform cerinței.
Restricții și precizări
- numerele vor fi mai mici decât
1.000.000
- numărul de numere citite este maximum
1.000
Problema care trebuie avuta in vedere este ca se citesc pe rand numere din fisierul de intrare si daca citirea se face cu `while(!cin.eof())’ se citeste la final o valoare nula care afecteza numarul de valori citite din fisier (deci care este numarata).
Codul problemei Hidden Number in C++, fara functii, ar fi:
#include <fstream>
using namespace std;
ifstream cin("hidden_number.in");
ofstream cout("hidden_number.in");
int nr, c = 0, suma = 0;
int main()
{
while(cin >> nr){
c++;
suma += nr;
}
if (suma % c == 0)
{
cout << suma/c;
}else{
cout << -1;
}
cin.close();cout.close();
return 0;
}
Daca calculam suma diferentelor avem:
(x-a1)+(x-a2)+(x-a3)+…+(x-an)=0 (unde n este numarul de numere citite)
adica, scris altfel avem:
n*x-(a1+a2+a3+…an)=0
adica x=(a1+a2+a3+…an)/n –-> catul dintre suma numerelor citite si numarul de numere citite.
Mai multe probleme rezolvate si explicate in detaliu gasiti accesand sectiunea Invata cu noi de pe acest site.
Pe Bootcamp online de invatare deschis de LAN Academy gasiti cursuri online.
Va asteptam sa va abonati la canalul nostru de Youtube Lanteam Solutions.