Rezolvare completă PbInfo #2107 Pomi

În livada sa, Vasile are pomi fructiferi, organizaţi în parcele în funcţie de soi. În fiecare an, scoate la vânzare doar o parte dintre pomii adulţi dintr-o singură parcelă. Ca să asigure spaţiu de dezvoltare pentru pomii rămaşi, Vasile s-a decis să fie scoşi la vînzare numai acei pomi din parcelă al căror număr de ordine este divizibil cu o cifră k, numită cifra anului.

Cerința

Cunoscând valorile a şi b, reprezentând numerele de ordine ale primului, respectiv ultimului pom din parcela din care se face vânzarea, precum şi kcifra anului, se cere să se determine numărul de pomi scoşi la vânzare de Vasile în acest an.

Date de intrare

Fişierul de intrare pomi.in conţine trei numere naturale a, b, k, fiecare pe câte o linie, ce reprezintă: numerele de ordine ale primului, respectiv ultimului pom din parcela din care se face vânzarea şi cifra anului.

Date de ieșire

Fişierul de ieşire pomi.out va conţine pe prima linie, un număr natural ce reprezintă numărul de pomi scoşi la vânzare de către Vasile.

Restricții și precizări

  • 1 < k ≤ 9
  • 1 < a < b
  • a şi b sunt numere naturale cu cel mult 80 de cifre fiecare.

Exemplu

pomi.in

23  
41
3

pomi.out

6

Explicație

Sunt 6 pomi scoşi la vânzare în acest an.
În cadrul parcelei, ei au avut numerele de ordine: 24, 27, 30, 33, 36, 39 (toate numerele dintre a şi b, care sunt divizibile cu cifra anului, k).

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 Pomi:

#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("pomi.in");
ofstream fout("pomi.out");
char x[81];
short a[100],b[100],k;
short c[100],d[100],e[100];
void setare(short *a, char *x)
{
    int i,lg;
    lg=a[0]=strlen(x);
    for(i=0; i<lg; ++i)
        a[lg-i]=x[i]-'0';
}
void divide(const short *a, short k,short *d)
{
    short lg1,nr,i,lg2,j;
    lg1=a[0];

    if(a[lg1]<k)
    {
        nr=a[lg1];
        i=lg1-1;
        lg2=lg1-1;
    }
    else
        i=lg2=lg1,nr=0;

    for(j=lg2; j>=1; --j,--i)
    {
        nr=nr*10+a[i];
        d[j]=nr/k;
        nr=nr%k;
    }
    d[0]=lg2;
}
void scade1(short *a)
{

    short i;
    i=1;
    while(a[i]==0)
    {
        a[i]=9;
        i++;
    }
    a[i]--;
    if(a[i]==0 && i==a[0])
        a[0]--;
}

void diferenta(short *a, short *b, short *e)
{
    short i,T=0;
    e[0]=max(a[0],b[0]);
    for(i=1; i<=c[0]; ++i)
    {
        e[i]=a[i]-b[i]+T;
        if(e[i]<0)
        {
            e[i]+=10;
            T=-1;
        }
        else
            T=0;
    }
    while(!e[e[0]] && e[0]>1)
        e[0]--;
}
int main()
{
    fin>>x;
    setare(a,x);
    fin>>x;
    setare(b,x);
    fin>>k;
    divide(b,k,c);
    scade1(a);
    divide(a,k,d);
    diferenta(c,d,e);
    for(short i=e[0]; i>=1; --i)
    fout<<e[i];
    fout<<'\n';
    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 Adresa de email.

Rezolvarea problemei #2107 Pomi

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2107 Pomi 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!