Zadanie z kombinatoryki

0

Czesc, jestem zupelnie poczatkujacy w programowaniu, niedawno zajalem sie algorytmami i strukturami danych, lecz wciaz staram sie zrozumiec zlozonosc obliczeniowa. Mam takie zadanie:
"Z cyfr od 0 do 9 wypisz wszystkie mozliwe kombinacje 10-cyfrowej liczby. Przyjmij, że cyfry mogą się powtarzac."
Przeciez 10 cyfrowa liczba podniesiona do potegi 10 (bo tak jest w zadaniu) da bodajze 100 000 000 000. Czy taki c++, c# czy python (od tych zaczynam nauke) wyswietli az tyle liczb na ekran?
Czyli najpierw musze zrobic tablice tych cyfr z 10 szufladkami, pozniej algorytm silnie i.. I nie wiem jakiego nastepnie algorytmu uzyc, albo w ogole zle to rozumiem.
Prosze o pomoc.
Pzdr

1

Nawet zadania nie przeczytałeś do tego wygląda na to, że nie wiesz:

  1. co to jest liczba 10 cyfrowa
  2. ile jest 10 do potęgi 10

Przeczytaj jeszcze raz treść zadania albo najlepiej 10 razy i ponownie zadaj pytanie.
W tej chwili zabierasz się do tego jak pijany do spaceru po linie.

0

Od 0 do 9 jest 10 cyfr. Mam znalezc wszystkie mozliwe kombinacje 10 cyfr sposrod 0-9 i wyswietlic je w konsoli.
Cos w stylu znalezienia 4-ro cyfrowego kodu pin, tylko ze miejsc na cyfry jest 10, a nie 4.
Na tym moja wiedza sie konczy

0

0000000000000 to 1 cyfrowa liczba

3

Czyli masz wyświetlić wszystkie liczby od:

0000000000
0000000001
0000000002
0000000003
...
0000070001
0000070002
0000070003
...
9999999997
9999999998
9999999999

Na czym zatem polega problem?
Co już zrobiłeś w tym kierunku by rozwiązać to zadanie?
Jakie masz pomysły?

6

Nie nazywajmy tego zadaniem z kombinatoryki, bo to obraża ten dział matematyki. To jest zadanie z podstawówki...

0

Tak, ale chodzi mi o implementacje w programie python, c++ lub c#. Nie wiem jak to zapisac.

0
katakrowa napisał(a):

Czyli masz wyświetlić wszystkie liczby od:

0000000000
0000000001
0000000002
0000000003
...
0000070001
0000070002
0000070003
...
9999999997
9999999998
9999999999

Na czym zatem polega problem?
Co już zrobiłeś w tym kierunku by rozwiązać to zadanie?
Jakie masz pomysły?

Czytasz co pisze? Chce zaimplementowac i wyswietlic algorytm w konsoli, a nie wiem jak go zapisac w danym jezyku (c#, c++, python). Twoje komentarze i pomoc sa zbedne oraz nie na temat.

3

Nikt Ci nie da kolego gotowca. Najpierw pokaż co zrobiłeś.

0

Na rosettacode jest sporo algorytmów z kombinatoryki

2

Jako, że mam dzisiaj dobre serce, to trochę pomogę:

static void Main()
{
    Console.WriteLine(1000000000);
    Console.WriteLine(1000000001);
    Console.WriteLine(1000000002);
    Console.WriteLine(1000000003);
    Console.WriteLine(1000000004);
    Console.WriteLine(1000000005);
    Console.WriteLine(1000000006);
    Console.WriteLine(1000000007);
    Console.WriteLine(1000000008);
    Console.WriteLine(1000000009);
    Console.WriteLine(1000000010);
    Console.WriteLine(1000000011);
    Console.WriteLine(1000000012);
    Console.WriteLine(1000000013);
    Console.WriteLine(1000000014);
    Console.WriteLine(1000000015);
    Console.WriteLine(1000000016);
    Console.WriteLine(1000000017);
    Console.WriteLine(1000000018);
    Console.WriteLine(1000000019);
    ....
    Console.WriteLine(9999999999);
}
2

Jako że powstały dwie wersje:
A) mają to być 10 cyfrowe liczby, których swoją drogą będzie 9*10^9 bo na pierwszym miejscu mogą być cyfry od 1 do 9, nie ma liczby 10 cyfrowej zaczynając się od 0.
B) ma to być ciąg 10 elementów gdzie elementy to cyfry od 0 do 9. Wtedy jest faktycznie 10^10.

W obydwu przypadkach wystarczy pętla, cała "trudnosc" zadania kryje się w liczeniu ile tych kombinacji jest. Próbuje zrozumieć po co implementować coś takiego, skąd takie zadanie?

0
katakrowa napisał(a):

W tej chwili zabierasz się do tego jak pijany do spaceru po linie.

Czyli prawidłowo. Na trzeźwo amatorowi się na pewno nie uda.

Coś czuję, że to trzeba będzie przenieść do Perełek z powodem Autor złośliwie i uporczywie nie chce pomocy.

2

Tutaj gotowe rozwiązanie w języku Common Lisp (interpreter: sbcl)

(defun f (x)
  (cond ((null x) (write-line "")) (t (f (cdr x)) (write (car x)))))
(defun g (x n k)
  (cond 
    ((= n 0) (f x))
    ((< k 9) (g (cons k x) (- n 1) 0) (g x n (+ k 1)))
    (t (g (cons k x) (- n 1) 0))))
(g nil 10 0)
1

Łap podpowiedź - gotowe rozwiązanie dla 2 cyfr (wypisuje liczby od 0 do 99) napisane w Brainfuck'u:

++++++++[>++++++<-]>-<
++++++++[>>++++++<<-]>>-<<
>>>++++++++++<<<
++++++++++[>+>>>++++++++++[<<+<.>.>.>-]<<----------<<-]

Tutaj link dla osób nie mających kompilatora: LINK

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