一个数组由4个不同的字符排列,请问该数组为n位长时候,如何把所有的排列显示出来?例如:有16种可能。
a,b,c,d
……
d,d,d,d

解决方案 »

  1.   

    static Char[] char4 = {'a', 'b', 'c', 'd'};
            static void disp(string prefix, int len)
            {
                if (len == 0)
                {
                    Console.WriteLine(prefix);
                    return;
                }            for (int i = 0; i < 4; ++i )
                {
                    disp(prefix + char4[i], len - 1);
                }
            }            disp("", n);
      

  2.   

    你的问题
    反正是相邻4位代表一个组合
    重复的不计
    对吧?
    每位取4位长的子串
    用arraylist判断是否是重复的 不重复就放进来
    最后输出例如 asdfdsafasdfsdasdfasfsdasffsadasfasfasdafasfasdafsdasda
    只包含4个字符 asdf
    从头开始取4位子串 asdf sdfd ......
    是这意思吗?
      

  3.   


    using System;namespace Cdefault
    {
    class MainClass
    {
    public static void Main(string[] args)
    {
    char[] s=new char[]{'1','2','3','4'};
    print(s);
    Console.Read();
    Console.WriteLine("Hello World!");
    }
    public static void print(char[] ary)
    {
    if(ary.Length==1)
    {
    for(int i=0;i<ary.Length;i++)
    Console.Write(ary[i]);
    Console.Write("\n");
    return;
    }
    int index=0;
    char tmp;
    char[] tmpary=(char[])ary.Clone();
    while(true)
    {
    for(int i=0;i<tmpary.Length;i++)
    Console.Write(tmpary[i]);
    Console.Write("\n");

    tmp=tmpary[index];
    if((index+1)==tmpary.Length)
    {

    tmpary[index]=tmpary[0];
    tmpary[0]=tmp;
    index=0;
    }
    else
    {
    tmpary[index]=tmpary[index+1];
    tmpary[index+1]=tmp;
    index++;
    }

    bool isover=true;
    for(int i=0;i<tmpary.Length;i++)
    {
    if(tmpary[i]!=ary[i])isover=false;
    }
    if(isover)break;

    }
    }
    }
    }