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).

#2920

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.

Lasă un răspuns