As vrea solutia de 100 de puncte la problema 1002 (Paginare) de pe pbinfo. Eu am dat o solutie de 90 puncte. Enunt:
Cerința
Pentru numerotarea paginilor unei serii enciclopedice formate din unul sau mai multe volume se presupune că se folosesc n cifre. Fiecare volum are 300 de pagini, eventual cu excepţia ultimului volum care ar putea avea mai puţine.
Pentru n dat, să se determine numărul de volume din serie V şi numărul de pagini P ale ultimului volum. Dacă nu este posibilă numerotarea paginilor folosind n cifre, se va afişa mesajul IMPOSIBIL.
Date de intrare
Programul citește de la tastatură numărul n.
Date de ieșire
Programul va afișa pe ecran numerele V P, separate prin exact un spaţiu, sau mesajul IMPOSIBIL.
Restricții și precizări
1 ≤ n ≤ 1 000 000 000
numerotarea paginilor se face începând cu 1
Solutia mea:
#include
using namespace std;
long long int n, c;
int main()
{
cin >> n;
c = n % 792;
if(c <= 9) { cout << n / 792 + 1 << ' ' << c << '\n'; return 0; }
else {
c -= 9;
if(c <= 180)
if(c % 2) cout << "IMPOSIBIL\n";
else { cout << n / 792 + 1 << ' ' << 9 + c / 2 << '\n'; return 0; }
else {
c -= 180;
if(c % 3) cout << "IMPOSIBIL\n";
else { cout << n / 792 + 1 << ' ' << 9 + 90 + c / 3 << '\n'; return 0; }
}
}
}
Răspunsuri la întrebare
Răspuns de
3
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int v,p,s=1;
v=n/792; n=n%792;
if (n>0) {
++v;
if (n<10) p=n;
else {
if (n<=189) {
n-=9;
if (n%2==1) s=0;
else p=10+n/2-1;
} else { n-=189;
if (n%3!=0) s=0;
else p=100+n/3-1;
}
}
} else p=300;
if (s==0) cout<<"IMPOSIBIL";
else cout<<v<<" "<<p;
return 0;
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Arte,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Engleza,
9 ani în urmă
Fizică,
9 ani în urmă