Rozdział 30 Zadanie domowe.
Ostatnio zmodyfikowano 2014-05-30 18:34
pepe450 Temat założony przez niniejszego użytkownika |
Rozdział 30 Zadanie domowe. » 2014-05-29 00:37:35 Witam mam problem z zadaniem domowym. Ogólnie ciężko mi wpaść na algorytm który będzie to realizował. Mianowicie treść jest taka.
Wyobraź sobie, że masz pięć pudełek. W każdym pudełku możesz umieścić jedną liczbę całkowitą z przedziału od 1 do 3 włącznie. Napisz program, który wypisze na ekranie wszystkie możliwe kombinacje w jaki sposób można zapełnić pudełka. Fragment danych wypisywanych na ekranie: 1 1 1 1 1 1 1 1 1 2 1 1 1 1 3 1 1 1 2 1 1 1 1 2 2 1 1 1 2 3 1 1 1 3 1 ... 3 3 3 3 1 3 3 3 3 2 3 3 3 3 3
Prosił bym o wskazówki jak najłatwiej zabrać się za to zadanie. Nie chce gotowego kodu chce podpowiedzi. Ale podpowiedź w stylu użyj pętli zagnieżdżonych będzie mało pomocna. |
|
jarek1402b |
» 2014-05-29 03:13:06 bardzo proste zadanko wystarczy chwileczke pomyśleć :) podpowiem że jest banalne dlatego ciężko jest coś podpowiedzieć :) wystarczy użyć kilku zmiennych (masz w zadaniu napisane ile dokładnie ;) ) no i użyć jednej z pętli (kilkakrotnie (mam na myśli uzycie pętli w pętli)) no i na koniec oczywiście wypisywanie cout'em. Ewentualnie jeśli chcesz znać wynik ile było permutacji (kombinacji) możesz dodać sobie zmienną zliczającą ilość wypisań;) Jeżeli wciąż ciężko jest Ci wpaść na pomysł polecam zmodyfikować problem do prostszej postaci a mianowicie 2 pudełka i w każdym możliwość ustawienia dwóch cyfr tj. 1 i 2 czyli na wyjsciu powinieneś otrzymać: 1 1 1 2 2 1 2 2
Jeżeli to nie pomoże to nie mam pojęcia jak inaczej nakierować Cię na rozwiązanie tego zadania. |
|
Moorfox |
» 2014-05-29 14:39:32 1 1 1 1 1
Przypomina mi to system czwórkowy tylko bez 0 ;x Algorytm obrazujac mozesz zrobić tak: 1 1 1 1 1 1 1 1 1 2 1 1 1 1 3 1 1 1 2 1 1 1 1 2 1 1 1 1 2 2 1 1 1 2 3 1 1 1 3 1 1 1 1 3 1 1 1 1 3 2 1 1 1 3 3 1 1 2 1 1 .....
czyli pseudokod 1.tab[] = {1,1,1,1,1} 2.funkcja wypisujaca tablice + znak konca linii 3.zwieksz ostatni element 4.jezeli kazdy element tablicy jest rowny 3 zakoncz 5.jezeli ostatni element jest 3 zamien go na 1 i zwieksz element wczesniejszy jezeli jest rowny 3 zamien go na 1 i zwieksz element kolejny... 6.przejdz do kroku 2 Byl EDIT bo zauwazylem ze przeciez mialo byc bez 0 |
|
jarek1402b |
» 2014-05-29 14:51:58 a nie prosciej zagnieździć kilka for'ow wsobie ? :) |
|
pekfos |
» 2014-05-29 15:38:01 Rozdział 30 Zadanie domowe. |
Lekcja 30: "Zagnieżdżanie pętli". Oj cienko, cienko.. |
|
pepe450 Temat założony przez niniejszego użytkownika |
» 2014-05-29 20:13:26 Witam rozwiązałem problem. Mam jeszcze tylko 2 pytanka. Czy licząc złożoność programu liczymy ilość kroków w pętli do potęgi ilość pętli? W moim przypadku 3 kroki do potęgi 5 bo tyle mam pętli. A po drugie czy dobrze rozumiem że w każdej mojej pętli zmienne "i" nie widzą się? Jeśli coś warto napisać lepiej proszę o wskazówkę ;) Treść mojego kodu. #include<iostream> #include<iomanip> using namespace std; int main() { int rozmiar = 4; int x = 1; int y = 1; int z = 1; int a = 1; int b = 1; int n = 2; int index = 0; for( int i = 0; b < rozmiar; i++ ) { for( int i = 0; a < rozmiar; i++ ) { for( int i = 0; x < rozmiar; i++ ) { for( int i = 0; y < rozmiar; i++ ) { for( int i = 0; z < rozmiar; i++ ) { cout << setw( n ) << b << setw( n ) << a << setw( n ) << x << setw( n ) << y << setw( n ) << z << endl; z++; index++; } y++; z = 1; } x++; y = 1; z = 1; } a++; y = 1; z = 1; x = 1; } b++; a = 1; y = 1; z = 1; x = 1; } cout << "Ilosc kombinacji: " << index; } |
|
Moorfox |
» 2014-05-29 20:29:18 zlozonosc obliczeniowa najprosciej(w przyblizeniu) jest to ilosc operacji dominujacych.Tutaj sa to petle. Najbardziej zewnetrzna petla for wykonywana jest rozmiar-razy. Schodząc niżej kolejna jest rozmiar*rozmiar razy wykonywana ale tych petli jest 5 zagniezdzonych czyli petla for najbardziej wewnetrzna wykona sie rozmiar*rozmiar*rozmiar*rozmiar*rozmiar razy czyli rozmiar^5,czyli n^5 ladna zlozonosc. Moja rada zacznij od nowa
EDIT: Do tego zadania wystarcza ci dwie petle. Pomysl jak.
EDIT2: Uzywasz nowej zmiennej dla kazdej reprezentowanej cyfry, miedzyinnymi dla tego wymyslono tablice, czytales poprzednie posty ? Dzialac twoj kod moze i dziala, samo ze dziala nie oznacza ze bedzie on wdrozony w jakis projekt w firmie MUSI byc on jak najbardziej sprawny |
|
pepe450 Temat założony przez niniejszego użytkownika |
» 2014-05-29 20:44:21 2 pętle a ta sama ilość zmiennych? |
|
« 1 » 2 |