Avatar billede hmortensen Nybegynder
07. juli 2007 - 15:20 Der er 12 kommentarer og
1 løsning

Alle muligheder

Hej

Jeg har en liste af 16 tal, og så skal jeg bruge alle muligheder hvor hvert tal kun må optræde en gang, og der skal være 4 tal i hvert resultat.

Altså:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16

Skal give:
1, 2, 3, 4
1, 2, 3, 5
1, 2, 3, 6
osv.

Hvordan kan dette løses?

Mvh.
hmortensen
Avatar billede mysitesolution Nybegynder
07. juli 2007 - 15:36 #1
har du det i et array?
Avatar billede mysitesolution Nybegynder
07. juli 2007 - 15:37 #2
Altså:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16

Skal give:
1, 2, 3, 4
1, 2, 3, 5
1, 2, 3, 6

? tror du har skrevet forkert?
Avatar billede mysitesolution Nybegynder
07. juli 2007 - 15:38 #3
er det noget som dette?

http://www.eksperten.dk/spm/773787
Avatar billede hmortensen Nybegynder
07. juli 2007 - 15:41 #4
Nej, det er alle muligheder jeg er ude efter. Dem jeg har vist er bare de 3 første.
Avatar billede mysitesolution Nybegynder
07. juli 2007 - 16:14 #5
altså det skal være tilfældigt?
Avatar billede arne_v Ekspert
07. juli 2007 - 16:23 #6
Er rækkefølgen af tallene signifikant eller ej ?
Avatar billede driis Nybegynder
07. juli 2007 - 16:24 #7
Dvs. du skal have alle mulige kombinationer med 4 tal, udfra dine "kilde" tal ? Er rækkefølgen vigtig ? Altså, ses 1,2,3,4 og 1,3,2,4 som en eller 2 forskellige kombinationer ?
Avatar billede hmortensen Nybegynder
07. juli 2007 - 16:33 #8
Det er to forskellige kombinationer. Samme tal må bare kun være én gang i hver kombination.
Avatar billede arne_v Ekspert
07. juli 2007 - 16:44 #9
Forslag:

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);
            Console.ReadLine();
        }
    }
}
Avatar billede hmortensen Nybegynder
07. juli 2007 - 16:58 #10
Det var lige som det skulle være arne. Laver du et svar.
Jeg kogte rundt i en løkke i en løkke osv, hvilket var dømt til at gå galt :)
Avatar billede arne_v Ekspert
07. juli 2007 - 16:59 #11
Jeg mener at den enten skal vær erekrusiv eller så skal du have et antal nestede
for løkker svarende til siz=v.Length.
Avatar billede arne_v Ekspert
07. juli 2007 - 17:00 #12
og et svar
Avatar billede arne_v Ekspert
07. juli 2007 - 17:00 #13
en gang mere
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester