Informatică, întrebare adresată de xDavid46, 9 ani în urmă

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 boiustef
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