Cerința
Se generează un şir de numere naturale ai cărui primi termeni sunt, în această ordine:
1, 20, 21, 300, 301, 320, 321, 4000, 4001, 4020, 4021, 4300, 4301, 4320, 4321, 50000,...
Deduceţi regula după care sunt generaţi termenii şirului şi scrieţi un program care să citească numerele naturale k
, n
şi x
şi care să determine:
a) numărul de termeni ai şirului care au prima cifră (cea mai semnificativă) egală cu k
;
b) cel de-al n
-lea termen al şirului din enunţ;
c) cel mai mare termen al şirului, mai mic sau egal decât x
.
Date de intrare
Fișierul de intrare nr.in
conține o singură linie pe care sunt scrise trei numere naturale k
, n
şi x
, separate prin câte un spaţiu.
Date de ieșire
Fişierul de ieşire nr.out
va conţine 3
linii:
– pe prima linie se va scrie un număr natural reprezentând numărul de termeni ai şirului care au prima cifră (cea mai semnificativă) egală cu k
;
– pe a doua linie se va scrie un număr natural reprezentând cel de-al n
-lea termen al şirului din enunţ;
– pe a treia linie se va scrie un număr natural reprezentând cel mai mare termen al şirului, mai mic sau egal cu x
.
Restricții și precizări
1 ≤ k ≤ 9
3 ≤ n ≤ 511
1 ≤ x ≤ 2.000.000.000
Exemplu
nr.in
4 19 57890
nr.out
8 50021 54321
Explicație
Pe prima linie a fişierului nr.out se scrie numărul 8
, deoarece sunt 8
termeni în şir care au prima cifră egală cu k=4
).
Pe a doua linie a fişierului se scrie numărul 50021
, deoarece cel de-al n
-lea (n=19
) termen al şirului este 50021
.
Numerele 54321
şi 600000
sunt doi termeni situaţi pe poziţii consecutive în şirul din enunţ, iar 54321 ≤ 57890 < 600000
. Astfel, numărul 54321
se scrie pe ultima linie a fişierului nr.out
.
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 nr:
#include <fstream>
#include <cmath>
using namespace std;
int main()
{
ifstream f("nr.in");
ofstream g("nr.out");
long x,z,p=1,y;
int n,k,c,i,j;
f>>k>>n>>x;
// cerinta a)
z=(long)pow(2,k-1);
g<<z<<endl;
//cerinta b)
z=0;
i=1;
do
{
c=n%2;
if(c!=0)z=z+i*p;
p=p*10;
i++;
n=n/2;
}
while (n>0);
g<<z<<endl;
//cerinta c
z=1;
for(j=2; (j<=511) && (z<x); j++)
{
n=j;
p=1;
y=z;
z=0;
i=1;
do
{
c=n%2;
if(c!=0)z=z+i*p;
p=p*10;
i++;
n=n/2;
}
while (n>0);
}
if((z==x)||(j==512)) g<<z;
else g<<y;
g<<endl;
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 #1440 nr
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1440 nr 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!