27. oktober 2009 - 17:59Der er
18 kommentarer og 1 løsning
finde alle mulige kombinationer af N tal
Hej
Jeg skal bruge en metode der gir mig alle mulige kombinationer. Lad os sige jeg har tallene fra 1-10 , så vil jeg gerne have dem blandet så jeg får alle kombinationer. Nogen der har en god ide til det ?
Her er et eksempel som genererer alle kombinationer af 4 ud af 16 tal hvor raekkefoelge ikke betyder noget:
using System;
namespace E { public class MainClass { public delegate void Processor(int[] v); public static void Print(int[] v) { for(int i = 0; i < v.Length; i++) Console.Write(" " + v[i]); Console.WriteLine(); } public static void Combinations(int[] a, int ix, int[] v, int used, Processor p) { if(used < v.Length) { for(int i = ix + 1; i < a.Length; i++) { v[used] = a[i]; Combinations(a, i, v, used + 1, p); } } else { p(v); } } public static void Combinations(int[] a, int siz, Processor p) { Combinations(a, 0, new int[siz], 0, p); } public static void Main(string[] args) { int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; Combinations(a, 4, Print); } } }
Synes godt om
Slettet bruger
27. oktober 2009 - 18:11#4
Kan helt sikkert gøres mere elegant - men denne metode virker
for (a=0;a<10;a++) for (b=0;b<10;b++) for (c=0;c<10;c++) for (d=0;d<10;d++) for (e=0;e<10;e++) for (f=0;f<10;f++) for (g=0;g<10;g++) for (h=0;h<10;h++) for (i=0;i<10;i++) for (j=0;j<10;j++) tiTal = "|"+a+"|"+b+"|"+c+"|"+d+"|"+e+"|"+f+"|"+g+"|"+h+"|"+i+"|"+j+"|"
Hej Arne , så godt det andet svar du gav i en lign sag , og har også prøvet din kode af - men det er ikke helt sådan det skal være :P
de 10 tal (kunne lige så godt være et andet , men vil højest sandsynligt være 10) - hvert tal må selvfølgelig kun optræde en gang og rækkefølgen er ligemeget, den kan jeg sortere på bagefter.
Det drejer sig i bund og grund om at jeg har to hold med 5 spillere på hvert hold og så skal jeg lave alle tænkelige muligheder.. - men anden del skulle jeg nok selv kunne lave. Rækkenfølgen på holdet er ligegyldig og derfor skal jeg jo efterfølgende sortere en masse rækker ud da feks
spiller 1,2,3,4,5 vil være det samme som 1,3,4,2,5.
Håber det gav mening , og tak for den hurtige respons
KISS: <html><body><script> for (a=1;a<10;a++) for (b=a+1;b<10;b++) for (c=b+1;c<10;c++) /* for (d=c+1;d<10;d++) for (e=d+1;e<10;e++) for (f=e+1;f<10;f++) for (g=f+1;g<10;g++) for (h=g+1;h<10;h++) for (i=h+1;i<10;i++) for (j=i+1;j<10;j++) */ document.write("|"+a+"|"+b+"|"+c+"|<br>") // "+d+"|"+e+"|"+f+"|"+g+"|"+h+"|"+i+"|"+j+"|"
MS har faaet rodet en masse sammen under begrebet LINQ: - selve LINQ syntaxen i C# sproget - et have af utility klasser og metoder i .NET frameworket - O/R-mapperne LINQ for SQL og LINQ for EF som altsaa er database orienteret
namespace E { public class Combiner { public delegate void Process(string[] comb); private static void Combine(string[] elms, Process p, string[] comb, int start, int ix) { if(ix < elms.Length/2) { for(int i = start; i < elms.Length; i++) { comb[ix] = elms[i]; Combine(elms, p, comb, i + 1, ix + 1); } } else {
Så vidt jeg kan se skal jeg ikke engang til at pille nogen linier ud , da der ik er nogen af dem der optræder mere end en gang , selv hvis man bytter rundt på rækkefølgen inden for det enkelte hold - har jeg ret ik ?
smid et svar , så får du points og kommer med i min aftenbøn :)
den løsning ser okay optimal ud til mig , og den er hurtig.
Takker for den hurtige hjælp
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.