Permalänk
Medlem

C# Siffer Kombination

Nu har det varit ett bra tag sen jag programmerade något så jag sitter och pillar med idéer jag får upp i huvudet bara. Har nu fastnat för en ide men jag har ingenting att komma med verkar det som :/

Vad jag vill göra är:
Kolla hur många kombinationer jag kan få med 3 siffror.
Jag vill inte bara visa svaret utan även alla möjliga svar t.ex
0
01
02
03
04
05
06
07
08
09
1
11
12
13
14
15
16
17
18
19
osv..

Är tyvärr helt tomt på hjärnkontoret, nån som har nå tips på vad man bör kolla upp etc

Visa signatur

C#/MonoGame Fanatiker.
Pixel Artist & Game Developer

Permalänk
Medlem

Går att lösa med rekursion bland annat...

Visa signatur

EPoX 8RDA+, XP2500+, 2x256Mb PC3200 (DualCh), Club3D 9800PRO, Seagate 7200.7 160Gb 8Mb Limited edition

Permalänk

Antal olika kombinationer med tre siffror om inledande nollor är OK är 10*10*10 = 1000, utan inledande nollor finns det ett mindre sätt att välja första siffran, dvs: 9*10*10 = 900. Om man vill ha antalet kombinationer med upp till tre siffror : 10*10*10+10*10+10 = 1110 om inledande nolla är OK, 9*10*10+9*10+9 = 999 annars.

Vet inget om C# men så här kan man göra i C

Utan inledande nollor, med tre siffror:

for (int i = 100; i < 1000; ++i) printf("%d", i);

På samma sätt med "upp till tre siffror" men med i initierat till 1.

Med inledande nollor blir det knepigare. Det här är ett sätt:

for (int i = 0; i < 10; ++i) { printf("%d", i); // * for (int j = 0; j < 10; ++j) { printf("%d%d", i, j); // * for (int k = 0; k < 10; ++k) printf("%d%d%d", i, j, k); } }

Skriver ut alla kombinationer med upp till tre siffror. För kombinationer med exakt tre siffror ta bort raderna markerade med "// *".

Permalänk
Medlem

Ett skojigt sätt att lösa det på är med hjälp av lite linq:

var permuations = from n1 in Enumerable.Range(0, 10) join n2 in Enumerable.Range(0, 10) on true equals true join n3 in Enumerable.Range(0, 10) on true equals true select string.Format("{0}{1}{2}", n1, n2, n3); foreach (var p in permuations) Console.WriteLine(p);

Eller så kan man köra på det lite tråkigare sättet och korsa Tesseracts for-loop med c#-toString-metoden såhär:

for (int i = 0; i < 1000; ++i) Console.WriteLine(i.ToString("000"));