Informatică, întrebare adresată de alexandrumije, 8 ani în urmă

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
Exemplul 1
Intrare

999
Ieșire

2 105
Exemplul 2
Intrare

900
Ieșire

IMPOSIBIL
Va rog urgent!
Dau coroana!

Răspunsuri la întrebare

Răspuns de alexandrumorus
1

#include <iostream>

using namespace std;

int main()

{

   long long v,p,n,posibil,cuv;

   posibil=0;

   cin>>n;

   if(n%792==0)

   {

       v=n/792;

       cuv=792;

   }

   else

   {

       v=n/792+1;

       cuv=n%792;

   }

   if(cuv<=9)

   {

       p=cuv;

       posibil=1;

   }

       if(cuv>=10 && cuv<=189 )

       {

           if((cuv-9)%2==0)

               {

                   p=(cuv-9)/2+9;

                   posibil=1;

               }

       }

       if(cuv>=189 && cuv<=792)

       {

           if((cuv-189)%3==0)

           {

               p=(cuv-189)/3+99;

               posibil=1;

           }

       }

   if(posibil==1)

   cout<<v<<" "<<p;

   else

       cout<<"IMPOSIBIL";

   return 0;

}


alexandrumije: Multumesc Mult!
Răspuns de Dilau420
1

#include <iostream>

#include <cmath>

using namespace std;

int main()

{

   int n , V , P;

   cin >> n;

   int cpv = 9 + 2 * 90 + 3 * 201 ;

   int ok = 1;

   if(n % cpv == 0)

   {

       V = n / cpv;

       P = 300;

   }

   else

   {

       V = n / cpv + 1;

       n %= cpv;

       P = 0;

       if(n < 10)

       P += n , n = 0;

       else

       {

           n -= 9;

           P += 9;

       }

       if(n <= 2 * 90)

       {

           if(n % 2 == 0)

           P += n / 2, n = 0;

           else

           ok = 0;

       }

       else

       {

       P += 90;

       n -= 2 * 90;

       }

       if(n % 3 != 0)

       ok = 0;

       else

       P += n / 3;

       }

   if(ok)

       cout << V << " " << P;

   else

       cout << "IMPOSIBIL";

   return 0;

}


Alte întrebări interesante