Avatar billede bubbaa Nybegynder
08. april 2008 - 14:38 Der er 3 kommentarer og
2 løsninger

vis muligheder bogstaver kan sættes sammen på

Hvordan viser jeg samtlige muligheder jeg kan sætte bogstaver sammen på?

Jeg får et antal bogstaver som input, og vil gerne vise samtlige output.
Får jeg f.eks. abc som input, skal det give disse output:
abc
acb
bac
bca
cab
cba

Det er også fint, hvis i kan give mig en måde at gøre det med tal på.
Mit problem er at det kan lige så godt være 4, 5 eller flere tegn jeg får ind.
Avatar billede sherlock Nybegynder
08. april 2008 - 14:56 #1
Taget fra http://radio.weblogs.com/0111551/2002/08/11.html :

using System;

namespace ConsoleApplication3

{
    class Permute
    {
          private void swap (ref char a, ref char b)
          {
              if(a==b)return;
              a^=b;
              b^=a;
              a^=b;
          }

          public void setper(char[] list)
          {
              int x=list.Length-1;
              go(list,0,x);
          }

          private void go (char[] list, int k, int m)
          {
              int i;
              if (k == m)
              {
                  Console.Write (list);
                  Console.WriteLine (" ");
              }
              else
                for (i = k; i <= m; i++)
                {
                    swap (ref list[k],ref list[i]);
                    go (list, k+1, m);
                    swap (ref list[k],ref list[i]);
                }
        }

    }

    class Class1
    {
        static void Main()
        {
          Permute p = new Permute();
          string c="sagiv";
          char []c2=c.ToCharArray ();

          p.setper(c2);
        }
    }
}
Avatar billede arne_v Ekspert
08. april 2008 - 15:15 #2
Simpelt rekursivt eksempel:

using System;

class Perm
{
    public static void WriteRecursive(string[] s, string prefix, int ix, bool[] used)
    {
        if(ix < s.Length)
        {
            for(int i = 0; i < s.Length; i++)
            {
                if(!used[i]) {
                    used[i] = true;
                    WriteRecursive(s, prefix + s[i], ix + 1, used);
                    used[i] = false;
                }
            }
        }
        else
        {
            Console.WriteLine(prefix);
        }
    }
    public static void WritePerm(string[] s)
    {
        bool[] used = new bool[s.Length];
        WriteRecursive(s, "", 0, used);
    }
    public static void Main(string[] args)
    {
        string[] s = { "aa", "bb", "cc", "dd" };
        WritePerm(s);
    }
}
Avatar billede bubbaa Nybegynder
08. april 2008 - 18:50 #3
Tak, det var jo fornemt. Lægger i et svar?
Jeg brugte arne v's eksempel.
Avatar billede sherlock Nybegynder
08. april 2008 - 19:04 #4
.
Avatar billede arne_v Ekspert
08. april 2008 - 19:38 #5
svar
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