Georgel, elev în clasa a VI-a, pretinde că poate realiza un program pentru orice problemă. Un coleg, ca să îl testeze, îi propune să scrie un program care să rezolve, cât mai rapid, următoarea problemă: doamna profesoară de informatică trebuie să colecteze, de la fiecare elev din şcoală, câte un număr natural oarecare şi le va scrie intr-un fişier numere6.in, câte un numar pe fiecare linie a fişierului. Pentru ca programul sa fie mai complicat, numerele din fişier trebuie codificate după următoarea regulă: numărul iniţial este completat cu două noi cifre, pe prima, respectiv, ultima poziţie. Prima cifră va reprezenta cifra de control a numărului iniţial ( cifra de control se obţine calculând suma cifrelor numărului, apoi suma cifrelor sumei şi tot aşa până la obţinerea unei singure cifre) iar ultima cifră va fi complementul faţă de 9 al cifrei de control.
De exemplu, pentru numărul 239 citit din fişier, se va obţine numărul 52394 (cifra de control a numărului 239 este 5, iar complementul faţă de 9 al acestei cifre este 4).
Cerinţă
Calculatorul, pe baza programului scris de Georgel, trebuie să scrie, în fişierul numere.out, pe linii distincte, cea mai mare diferenţă dintre două cifre consecutive ale numărului astfel obţinut.
Răspunsuri la întrebare
Răspuns de
0
#include <fstream>
#include <cmath>
using namespace std;
int x,v[15],y,j,i, maxi,z;
ifstream fin("numere6.in");
ofstream fout("numere6.out");
int oglindit(int x)
{
int aux=0;
while (x)
{aux=aux*10+x%10;
x=x/10;
}
return aux;
}
int sc(int x)
{
int sum=0;
while (x)
{
sum+=x%10;
x/=10;
}
if (sum>9)
return sc(sum);
else
return sum;
}
int main()
{
while (fin>>x)
{
y=oglindit(x);
v[0]=sc(x);
while (y)
{
i++;
v[i]=y%10;
y/=10;
}
i++;
v[i]=9-v[0];
for (j=0;j<i;j++)
{
z=abs(v[j]-v[j+1]);
if (z>maxi)
maxi=z;
}
fout<<maxi<<endl;
maxi=0;
for (i=0;i<=14;i++)
v[i]=0;
i=0;
}
}
#include <cmath>
using namespace std;
int x,v[15],y,j,i, maxi,z;
ifstream fin("numere6.in");
ofstream fout("numere6.out");
int oglindit(int x)
{
int aux=0;
while (x)
{aux=aux*10+x%10;
x=x/10;
}
return aux;
}
int sc(int x)
{
int sum=0;
while (x)
{
sum+=x%10;
x/=10;
}
if (sum>9)
return sc(sum);
else
return sum;
}
int main()
{
while (fin>>x)
{
y=oglindit(x);
v[0]=sc(x);
while (y)
{
i++;
v[i]=y%10;
y/=10;
}
i++;
v[i]=9-v[0];
for (j=0;j<i;j++)
{
z=abs(v[j]-v[j+1]);
if (z>maxi)
maxi=z;
}
fout<<maxi<<endl;
maxi=0;
for (i=0;i<=14;i++)
v[i]=0;
i=0;
}
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
9 ani în urmă
Geografie,
9 ani în urmă
Limba română,
9 ani în urmă