IT şi electronică > Programare

cifra de pe pozitia m dintr-un sir de cifre

(1/2) > >>

Ayumi:
Buna seara !

Nu reusesc sa rezolv urmatoarea problema :
Ionel este pasionat de matematică. El inventează tot felul de probleme. De data aceasta Ionel s-a gândit să genereze un şir de cifre, plecând de la un număr natural şi aplicând o anumită regulă. De exemplu, pentru numărul 425 el va genera şirul: 4, 4, 4, 4, 2, 2, 5, 5, 5, 5, 5 astfel: ia, în acestă ordine, prima cifra din număr (4) şi o repetă de 4 ori, apoi ia a doua cifră (2) şi o repetă de 2 ori, apoi ia a 3-a cifra (5) şi o repetă de 5 ori. Ionel se întreabă ce cifră se găseşte în şir pe o pozitie precizată. De exemplu, pe poziţia 3 se găseşte cifra 4.

Scrieţi un program care, pentru numărul N dat şi M, poziţia unui termen din şir, determină valoarea termenului al M-lea din şirul generat după regula de mai sus.De exemplu,pentru N = 425 si m = 5 ==> 2,iar pentru N= 302 si m = 2 rezulta 3.
Ma gandeam sa scot cifrele din numarul N si sa le retin intr-un vector a si sa am o variabila i care merge de la 1 pana la numarul de cifre ale lui N. Cum as putea continua? Este de ajuns daca imi puteti da o idee,deoarece cu for-urile pe care le-am folosit eu intr-un while nu merge programul decat pentru unul din exemplele de mai sus.

HarapAlb:
Se poate face mai simplu, lungimea sirului e data de suma cifrelor numarului.

Ayumi:
Da,asta am observat si eu dupa ce am mai incercat cu programul,dar cum pot continua dupa asta ?

Quantum:
Declari un sir de lungime egala cu suma si apoi pentru fiecare element din sirul initial adaugi la al doilea sir elementul respectiv de cate ori indica elementul. Astfel indicele m-1 v-a indica elementul cautat in sirul 2. Am scris un exemplu:

--- Cod: ---#include<iostream>

using namespace std;
int main()
{
    int N,c[5],m,k=0,j=0, suma=0;
    cin>>N;
    cin>>m;

    while(N!=0)
    {
    c[k]=N%10;
    N/=10;
    suma=suma+c[k];
    k++;
    }
    int sir2[suma];
    k--;
    for (;k>=0;k--)
    {
        for(int i=0;i<c[k];i++)
        {
            sir2[j]=c[k];
            j++;
        }
    }
    cout<<sir2[m-1];
    return 0;
}

--- Terminare cod ---

AlexandruLazar:
Principiul de rezolvare indicat de Quantum e ok, dar se poate face chiar mai simplu de atât, fără a mai genera şirul acela într-un vector. Desigur, pe urmă devine mai mult o problemă de matematică decât de programare.

Navigare

[0] Indexul de Mesaje

[#] Pagina următoare

Du-te la versiunea completă