Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rozdział 30 Zadanie domowe.

Ostatnio zmodyfikowano 2014-05-30 18:34
Autor Wiadomość
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.
P-111039
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.
P-111041
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
P-111063
jarek1402b
» 2014-05-29 14:51:58
a nie prosciej zagnieździć kilka for'ow wsobie ? :)
P-111064
pekfos
» 2014-05-29 15:38:01
Rozdział 30 Zadanie domowe.
Lekcja 30: "Zagnieżdżanie pętli". Oj cienko, cienko..
P-111065
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.
C/C++
#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;
}
P-111079
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
P-111082
pepe450
Temat założony przez niniejszego użytkownika
» 2014-05-29 20:44:21
2 pętle a ta sama ilość zmiennych?
P-111084
« 1 » 2
  Strona 1 z 2 Następna strona