Algorytm do zliczania wystąpień liczb w dwóch tablicach

Odpowiedz Nowy wątek
2013-12-28 19:49

Rejestracja: 7 lat temu

Ostatnio: 5 lat temu

0

Witam.
Piszę program: http://ideone.com/oMvuPs -treść zadania
i mam zagwozdkę bo nie wiem jak zrobić to zliczanie wystąpień liczb w zbiorach reprezentujących dany pomysł.
Przechowuję je (tzn. te zbiory liczb) jako tablice, które należą do poszczególnych elementów/pomysłów wrzucanych na stos/listę.
Nie wiem czy to dobry pomysł. Może ktoś z was zna lepszy i wie jak ten problem rozwiązać?
Jeśli wiecie co tu zrobić to będę wdzięczny za pomoc.
Pozdrawiam i wszystkiego dobrego w nowym roku.

Pozostało 580 znaków

2013-12-28 20:02

Rejestracja: 14 lat temu

Ostatnio: 2 minuty temu

1
unsigned CNT[10]={};
unsigned N,V=0;
for(cin>>N;N--;++CNT[V]) cin>>V;

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2013-12-28 20:10

Rejestracja: 7 lat temu

Ostatnio: 5 lat temu

0

Ok dzięki, ale przydałoby się małe wytłumaczenie :) Bo jeśli chodzi ci o wczytywanie to wiem jak zrobić.

Pozostało 580 znaków

2013-12-28 20:12

Rejestracja: 14 lat temu

Ostatnio: 2 minuty temu

0

Tu masz od razu wczytywanie i zliczanie wystąpień.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2013-12-28 20:32

Rejestracja: 7 lat temu

Ostatnio: 5 lat temu

0

Czyli co? Zliczać wystąpienia każdej liczby, zapisywać je do pomysłu i potem przy wywołaniu funkcji która te pomysły wyszukuje i porównuje używać tych zliczonych wartości?

Pozostało 580 znaków

2013-12-28 22:25
Moderator

Rejestracja: 12 lat temu

Ostatnio: 2 godziny temu

1

@_13th_Dragon dał niezłą siekierę dla początkujących więc może rozpiszę co i jak:

W C i C++ zmienne na stercie, które nie są inicjalizowane mają wartość losową.
W C i C++ tablice można inicjalizować przy pomocy {} (ale tylko inicjalizować, potem to już nie działa).
Jeśli w {} jest mniej elementów niż rozmiar tablicy, to nadmiarowe elementy są uzupełniane 0.

To tłumaczy nam 1 linijkę:

<code=c++>unsigned CNT[10]={}; ``` 2 linijka nie wymaga chyba tłumaczenia. Pętla `for` może być również zapisana przy pomocy pętli `while` w taki sposób: ```cpp for (a; b; c) { d; } // to to samo co a; while (b) { d; c; } ``` Przy czym zarówno `while` jak i `for` wykonują się tak długo jak warunek jest prawdziwy. Operator postfiksowy `--` oznacza, że chcemy zmniejszyć wartość danej zmiennej o 1 i uzyskać wartość zmiennej PRZED zmniejszeniem. Teraz składając wszystko do kupy nasza pętla wygląda tak: ```cpp cin >> N; while (N--) { cin >> V; ++CNT[V]; } ``` Czyli: 1. Wczytujemy liczbę testów 2. `N` razy wykonujemy pętlę 1. Wczytujemy liczbę 2. Zwiększamy wartość komórki w tablicy `CNT` odpowiadającej wczytanej liczbie
edytowany 1x, ostatnio: hauleth, 2013-12-29 15:50

Pozostało 580 znaków

2013-12-28 22:26

Rejestracja: 14 lat temu

Ostatnio: 2 minuty temu

0
unsigned stan[10],idea[10];
unsigned more=0;
for(unsigned i=0;i<10;++i) more+=(stan[i]<idea[i]);
if(more>=3) // pasuje

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2013-12-29 11:51

Rejestracja: 7 lat temu

Ostatnio: 5 lat temu

0

Czyli rozumiem, że mam mieć 2 tablice. Jedną do przechowywania liczb opisujących pomysł, a druga do ilości wystąpień danej liczby?
Jak na razie to mam tak kod napisany, że każdy pomysł ma tablicę z tymi liczbami które go opisują i jakoś zamierzałem je porównywać, ale rzeczywiście można by 2 tablice robić.

Pozostało 580 znaków

2013-12-29 13:23

Rejestracja: 14 lat temu

Ostatnio: 2 minuty temu

Nie, zawsze trzymasz tylko ilości wystąpień. Jedna tablica jako stan oraz po jednej tablice przy każdym pomyśle.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2013-12-29 20:56

Rejestracja: 7 lat temu

Ostatnio: 5 lat temu

0

Ok dzięki Dragon. Teraz już chyba zrozumiałem. Dałeś mi praktycznie gotowy kod. Mam nadzieję, że po zaimplementowaniu w moim programie (jeśli niczego nie sknocę) zadziała.

Pozostało 580 znaków

2013-12-30 14:53

Rejestracja: 7 lat temu

Ostatnio: 5 lat temu

0

http://ideone.com/8dKts7 - to jest kod tego zadania.
Możecie mi sprawdzić dlaczego nie działa poprawnie?
Zalicza tylko jeden test na 8 i tyle. Visual studio kompiluję ale jak wprowadzam dane to czasem przerywa działanie programu i pieje coś z przepinaniem last->next na NULL.
Błagam was pomóżcie.

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0