Informatică, întrebare adresată de Utilizator anonim, 9 ani în urmă

Georgiana nu are clipă de răgaz. Profesorul de info îi cere acum să afle cel mai mic număr natural de n cifre care împărţit la b dă restul r. Poate o ajutaţi să treacă şi peste acest hop.


blindseeker90: presupun ca vrei raspunsul in c++

Răspunsuri la întrebare

Răspuns de blindseeker90
11
ideea principala din spatele algoritmului este sa compari restul impartirii celui mai mic numar posibil format din n cifre cu restul dorit

Sa zicem ca ai de obtinut un rest r la impartirea cellui mai mic nr de 3 cifre la 7
impartirea lui 100 la 7 are restul 2
daca vrei sa obtii un rest mai mare sau egal, poti sa aduni la numarul 100 diferenta dintre restul dorit si cel obtinut la impartirea cu 100. Daca vrei sa obtii de exemplu restul 4, atunci numarul va fi rezultat=100+4-2=102.
Daca in schimb vrei sa obtii un rest strict mai mic, nu mai poti sa scazi, deci trebuie sa aduni o data impartitorul si apoi sa aduni restul dorit si sa scazi restul de pana atunci
pentru rest dorit 1, atunci am avea 100+7+1-2=106,
Algoritmul merge, dar nu va da probabil nota mare pe siteul acela. Eu nu sunt de acord cu pbinfo pentru ca nu iti da testcaseurile. Daca iti da si formatul de date la care se asteapta, calitatea codului poate creste foarte mult, poti sa te gandesti cum sa formatezi si datele. Oricum, cam asta e ideea principala pe care as merge eu.

#include <iostream>
using namespace std;

int main(){
unsigned long long int x=1,rezultat;
int i,n,b,r,rest;
cout<<"Introduceti nr de cifre:";

cout<<"Introduceti impartitorul:";
cin>>b;
cout<<"Introduceti rest dorit:";
cin>>r;
if(r>=b||r<0){
cout<<"\nAtentie!!! Restul trebuie sa fie mai mic decat impartitorul si pozitiv";
cout<<-1;
return 0;
}

for(i=1;i<n;i++){
x=x*10;
}
rest=x%b;
if(rest<=r){
rezultat=x+r-rest;
}
else{
rezultat=x+b-rest+r;
}
if(rezultat>=10*x){
rezultat=-1;
}
cout<<rezultat;
return 0;


Alte întrebări interesante