Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Problema c++  (Citit de 6623 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
andreiuta
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« : Iunie 28, 2014, 10:39:46 »

Am o problema la c++. Cerinta e asta:Se citesc de la tastatură două numere naturale s1 şi s2 (0<s1≤18, 0≤s2≤18) şi se cere
scrierea în fişierul BAC.TXT, fiecare pe câte o linie, în ordine strict crescătoare, a tuturor
numerelor naturale cu exact 5 cifre, pentru care suma primelor două cifre este egală cu
s1, iar suma ultimelor două cifre este egală cu s2. Pentru determinarea numerelor
indicate se utilizează un algoritm eficient din punct de vedere al timpului de executare.
Exemplu: dacă s1=8, iar s2=7, atunci 35725 este unul dintre numerele care respectă
proprietatea cerută (3+5=8 şi 2+5=7).
Am facut si un program ,si l-am rulat pe hartie,dupa parerea mea este corect. Insa pe calculator,daca introduc valorile,nu-mi afiseaza nimic in .txt .Am scris si programul si il voi atasa aici:
#include <iostream>
#include <fstream>
using namespace std;
ofstream g("bac.txt");
int main()
{int s1,s2,i;
cin>>s1,s2;
   i=10000;
   while(i<100000)
   {if ((i/10+i/100==s1)&&(i%10+i%100==s2))
   g<<i;
   i++;
   }
    return 0;
}

nu inteleg ce este gresit,imi poate explica cineva va rog?
Memorat
SRadu
Client obisnuit
**

Karma: 31
Deconectat Deconectat

Mesaje: 74



Vezi Profilul
« Răspunde #1 : Iunie 28, 2014, 10:44:15 »

i / 10 si i / 100 nu iti returneaza primele 2 cifre, ci primele 4, respectiv primele 3(ca un numar unitar).

Prima conditie din if ar trebui schimbata.

i / 100.000 iti da prima cifra
(i / 10.000) % 10 ti-o da pe a doua.

Dar vezi ca se poate mai eficient decat faci tu acolo. Incearca sa variezi prima cifra, iar a doua va fi unic determinata. Apoi incearca sa variezi penultima si ultima va fi unic determinata.
Memorat
andreiuta
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #2 : Iunie 28, 2014, 10:58:49 »

Mersi frumos.Am depistat greseala,intr-adevar. Era la extragerea cifrelor. O sa atasez problema corecta in caz ca mai da cineva peste asa ceva:
#include <iostream>
#include <fstream>
using namespace std;

int main()
{int s1,s2,i;
cin>>s1>>s2;
   cin>>i;
   while(i<100000)
   {if ((i/10000+(i/1000)%10==s1)&&(i%10+(i/10)%10==s2))
   cout<<i<<" ";
   i++;
   }
    return 0;
}
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines