[ sannyy @ 17.01.2011. 15:45 ] @
Sa tastature se unose dva broja, i to prirodan broj N koji moze imati do 255 cifara i prirodan broj K u opsegu 1-255, pri cemu je K manji od broja cifara broja N. Ispisati najveci broj koji se moze dobiti izbacivanjem K cifara iz broja N, kao i pozicije obrisanih cifara.
Primjeri su navedeni dolje:
N K
123456789 3
9876543210 4
23476901548237019 8
666435324321 5

Novi broj Pozicije obrisanih cifara
456789 1,2,3
987654 7,8,9,10
958237019 1,2,3,4,5,7,8
6665432 4,5,7,8,12
[ sannyy @ 17.01.2011. 17:49 ] @
Dajte molim vas pomozite mi.
Da li da N deklarisem kao niz jer K mora biti manji od broja cifara od broja N, pa bih se onda mogla pozivati na duzinu niza N.
P.S. Primjere nisam napisala dobro.
[ Nedeljko @ 18.01.2011. 09:05 ] @
Citat:
sannyy: Da li da N deklarisem kao niz jer K mora biti manji od broja cifara od broja N, pa bih se onda mogla pozivati na duzinu niza N.


Da.
[ sannyy @ 19.01.2011. 11:27 ] @
Postoji li mogucnost da N deklarisem kao string, pa da onda idem preko duzine stringa (strlen)?? (nadam se da sad nisam lupila s ovim string)
Nema mi smisla kako god uradim. Ne radi ono sto treba da radi, tj.
N=23476901548237019, a K=8
Novi broj: 958237019
Pozicije obrisanih cifara: 1,2,3,4,5,7,8
[ plague @ 19.01.2011. 13:38 ] @
Imas li problema sa logikom zadatka ili ne znas kako da realizujes ideju? Ako imas ideju, izlozi je pa cemo smisliti nesto.
Mozes raditi na nekoliko nacina zadatak, jedan od njih je i preko stringova.
[ chaami @ 21.01.2011. 04:11 ] @
Code:
#include <iostream>

using namespace std;

int main()
{
    char niz[255];
    int k;
    cout << "UNESI NIZ ";
    cin >> niz;
    cout << "\nUNESI K ";
    cin >> k;
    int n=strlen(niz);
    int ostatak=k+1;
    int xcnt=0;
    int start=0;
    int bign=0;
    int biggest;
    while(ostatak>1)
    {
        biggest=0;
        for (int i=start;i<(start+ostatak);i++)
        {
            if (niz[i]>biggest)
            {
                biggest=niz[i];
                bign=i;
                if (i>start)
                {
                    for (int j=start;j<i;j++)
                    {
                        if (j<n)
                        {
                            niz[j]='x';
                            xcnt++;
                        }
                    }
                }

            }
        }
        ostatak=ostatak-(bign-start);
        start=bign+1;
    }
    if (xcnt<k)
    {
        for (int i=0;i<(k-xcnt);i++)
        {
            niz[n-i-1]='x';
        }
    }
    cout << "\nNAJVECI BROJ : ";
    for (int i=0;i<n;i++) if (niz[i]!='x')cout << niz[i];
    cout << "\n\nIZBACENI BROJEVI : ";
    for (int i=0;i<n;i++) if (niz[i]=='x')cout << i+1 << " ";
    cout << "\n";
    system("pause");
    return 0;
}

Ovo sam odradio cisto da bi ja vezbao.
Nisam bas siguran da ovo 100% radi. U svakom slucaju, ti proveri pa vidi kako ces dalje.
[ chaami @ 21.01.2011. 04:37 ] @
Ne radi dobro.
while petlja treba da glasi
Code:
while(ostatak>1 && ((start+ostatak)<=n))