[ nyxemce @ 07.05.2010. 09:00 ] @
_______________
1 2 3

4 5 6

7 8 9

* 0 #
_______________



napisati program koji ce generisati 8-cifreni broj ali na način da se svaki sljedeći pritisak na broj bude u obliku slova L (
primjer. kao da birate šahovskom figurom konj). primjer jednog broja = 29276183 ili 27272727.
Uslovi su
1. da broj ne sme početi sa 0 i 1 (prva cifra nesmje biti 0 ili 1)
2. samo zadnja cifra moze da sadrži * ili #, ostale cifre ne smiju sadrzavati * i #


Generisati sve moguće kombinacije brojeva.

Ako bi neko mogao ukratko objasniti na koji način ovo uraditi, ne znam da li bi bilo dobro koristiti niz od 8 karaktera te tako provjeravati uslove. Na koji nacin bi bilo najbolje izvesti ovo biranje u obliku L slova


Hvala za svaku pomoc...
[ Mihajlo Cvetanović @ 07.05.2010. 10:27 ] @
Ovo bi lepo moglo da se reši rekurzivno. Imaš rekurzivnu funkciju koja bira sledeći broj, i kad ga odabere onda poziva samu sebe da odabere sledeći i sledeći, sve dok ne napravi osmocifrenu kombinaciju. Ta kombinacija se ispisuje, a rad nastavlja.

Svaka trenutna pozicija ima skup dozvoljenih sledećih pozicija. Ta lista skupova bi izgledala ovako:

1: 6, 8
2: 7, 9
3: 4, 8
4: 3, 9, 0
5: *, #
6: 1, 7, 0
7: 2, 6, #
8: 1, 3
9: 2, 4, *
0: 4, 6

Rekurzivna funkcija bi prosto mogla da ima jedan switch u kome se gleda trenutna pozicija, i poziva funkcija rekurzivno za svaku moguću sledeću poziciju. Na primer:

Code:

void prikazi_resenje(char trenutna_pozicija)
{
  static int indeks_trentune_pozicije = 0;
  static char trenutno_resenje[9] = {0};

  if ((trenutna_pozicija == '#' || trenutna_pozicija == '*') && indeks_trenutne_pozicije != 7)
    return; // Ova dva znaka su dozvoljena samo na kraju

  // Indeks se ovde povećava, i obavezno mora da se smanji pre izlaska iz funkcije
  trenutno_resenje[indeks_trenutne_pozicije++] = trenutna_pozicija;

  if (indeks_trenutne_pozicije == 8)
    printf("%s\n", trenutno_resenje);
  else
  {
    switch (trenutna_pozicija)
    {
      case '1':
        prikazi_resenje('6');
        prikazi_resenje('8');
        break;

      // Slično i za ostale
    }
  }

  --indeks_trenutne_pozicije;
}


Tja, lakše mi je da napišem skoro čitavu funkciju, nego da objasnim :-). Nemoj samo da mi se žališ da ovo ne radi, cilj mi nije bio da ti dam rešenje, nego da ti objasnim kako rešenje treba da izgleda. Ako ne radi onda sam pronađi grešku. Interesantno je da broj 5 nikako ne može da bude deo 8-cifrene kombinacije, ali to nije bitno za rešenje zadatka.

Iz glavne funkcije pozivaš ovu rekurzivnu u petlji koja ide od '2' do '9' (obrati pažnju da nije od 2 do 9, nego od '2' do '9'). I to je to.
[ nyxemce @ 07.05.2010. 16:51 ] @
hvala velika na odgovoru ;);)
sad kontam !