• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

zliczanie zer pomiędzy jedynkami...

Mały hosting, OGROMNE możliwości
0 głosów
1,277 wizyt
pytanie zadane 19 sierpnia 2016 w C i C++ przez rafalmagician Obywatel (1,340 p.)

Mam problem bo: mam liczbę binarną np, 101001 i chcę policzyć tylko zera pomiędzy jedynkami ale tak żeby policzył jedno zero za pierwszą jedynką i dwa zera za drugą jedynką i zapisał wyniki w dwóch osobnych zmiennych np. z1=1 i z2 =2. I nie wiem jak to napisać i się za to zabrać. Więc proszę o jakieś podpowiedzi z waszej strony :)

Kod funkcji:

int solution(int N)
{
    int i=0,_count=0;
    int t[30];
    //char t[30];
    while(N){
        if(N%2==0)
            t[i] = 0;
        else
            t[i] = 1;
        N/=2;
        i++;
        _count++;
    }

    for(i=_count-1;i>=0;i--)
            cout << t[i] << " ";

cout << endl;

    int z1=0,z2=0;
    for(i=0;i<_count;i++){
        switch(t[i]){
        case 0:

        break;
        case 1:

        break;
        }
    }

    if(z1>z2)
        return z1;
    else
        return z2;
}

 

2 odpowiedzi

0 głosów
odpowiedź 19 sierpnia 2016 przez fenq80 Bywalec (2,940 p.)
edycja 19 sierpnia 2016 przez fenq80
Dlaczego N dzielisz na dwa? Jeśli N było 101001 to po podzieleniu na 2 otrzymasz 50500 (chyba coś nie tak). Musisz podzielić przez 10 aby pozbyć się ostatniej cyfry. Czyli 101001/10=10100. I znowu dla tej liczby sprawdzasz ostatnia cyfrę. I tak dalej. W instrukcjach switch case nic nie jest wykonywane. Aby sprawdzić lb zer po sobie zrobiłbym tablicę int z[2] (z[1],z[2]=0) i zmienna np int a=0.zrobiłbym pętle while(i
komentarz 19 sierpnia 2016 przez rafalmagician Obywatel (1,340 p.)
N podaje użytkownik jako liczbę dziesiętną a dzielę żeby zamienić liczbę na binarną. I w tej binarnej chcę policzyć te zera. Osobno pomiędzy jedynkami i nie wiem jak ?? A liczba 101001 to tylko przykład :)
komentarz 19 sierpnia 2016 przez fenq80 Bywalec (2,940 p.)
To takie życzy trzeba napisać jak się pytanie zadaje
komentarz 19 sierpnia 2016 przez rafalmagician Obywatel (1,340 p.)

Udało mi się coś takiego zrobić i działa ale tylko do drugiej jedynki:

int solution(int N)
{
    int i=0,_count=0;
    int t[30];
    while(N){
        if(N%2==0)
            t[i] = 0;
        else
            t[i] = 1;
        N/=2;
        i++;
        _count++;
    }
    for(i=_count-1;i>=0;i--){}

    int z1=0,z2=0;
    int j1=0;
    for(i=0;i<_count;i++){
        if(t[i] == 1)
            j1++;
        if(t[i] == 0 && j1 == 1)
            z1++;
        if(t[i] == 0 && j1 == 2)
            z2++;
    }
    if(z1>z2)
        return z1;
    else
        return z2;
}

A jak to zrobić ogólnie żeby nie pisać tyle warunków ??

0 głosów
odpowiedź 19 sierpnia 2016 przez adas94 Nałogowiec (29,200 p.)
Możesz np. wrzucić tą liczbę do stringa i iterować po kolejnych wartościach. Jeśli trafi na 1, to wchodzisz do pętli, która będzie inkrementowała licznik (zer) tak długo aż znowu trafi na 1 itd. Coś w ten deseń.
komentarz 19 sierpnia 2016 przez rafalmagician Obywatel (1,340 p.)

Zrobiłem coś takiego i działa tak jak chcę... prawie....

int solution(int N)
{
    int max=0,zero=0;
    while(N){
        if(N%2==0){
            zero++;
        }
        else{
            if(zero>max){
                max=zero;
                zero=0;
            }
        }
        N/=2;
    }
    return max;
}

Teraz mam problem że: mam liczbę binarną 100 (czyli 4) i program zlicza mi zera a ja chcę żeby wypisał zero w zmiennej max bo zera nie są pomiędzy jedynkami. I czy da sie to jakoś zrobić bez zapisywania do tablicy czy jednak muszę mieć tablicę ??

komentarz 26 sierpnia 2016 przez 9au5a Początkujący (280 p.)
moze zrob sobie kopie liczby N, i na poczatku w while sprawdz czy N==Ncoppy i jesli tak to napisz np. while w ktorym zignorujesz pierwsze zera

Podobne pytania

0 głosów
2 odpowiedzi 831 wizyt
0 głosów
1 odpowiedź 783 wizyt
pytanie zadane 28 lutego 2023 w Python przez benek111 Początkujący (260 p.)
0 głosów
0 odpowiedzi 355 wizyt

93,717 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,262 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...