本帖最后由 caozhy 于 2011-03-29 17:46:01 编辑

解决方案 »

  1.   

    这个叫排列,不叫排序方法很简单,就是用递归:void Main()
    {
        for (i = 1; i < 9; i++)
            p(i.ToString());
    }void p(string s)
    {
         for (int i = 1; i <= 9; i++)
        {
            if (s.SubString(s.Length - 1) != i.ToString())
            {
                if (s.Length > 8) 
                    Console.WriteLine(s += i.ToString()); 
                else 
                    p(s += i.ToString());
            }
        }    
    }
      

  2.   

    其实数字是一个特例,也可以直接循环:
    int[] has = {0, 0, 0, 0, 0, 0, 0, 0, 0};
    for (long i = 123456789; i <= 987654321; i++)
    {
        string s = i.ToString();
        for (int j = 0; j < 9; j++) has[i] = 0;
        for (int j = 0; j < 9; j++) { 
            if (has[Convert.ToInt32(s.SubString(i, 1))] == 1) goto Skip: ;
            has[Convert.ToInt32(s.SubString(i, 1))] = 1;
        }
        Console.WriteLine(s);
    Skip:
        
    }
      

  3.   

    本帖最后由 caozhy 于 2011-03-30 08:48:18 编辑
      

  4.   

                for (int i = 123456789; i < 987654322; i++)
                {
                    char[] a;
                    Array.Sort(a = i.ToString().ToCharArray());
                    if (new string(a)=="123456789")
                    {
                        Console.WriteLine(i);
                    }
                }代码够短吧...也很好理解,至于效率嘛... 呵呵呵呵
      

  5.   

    参考此贴:http://topic.csdn.net/u/20110303/09/acadf64f-abce-41e2-b30c-e6d7cba62881.html
      

  6.   


    void Main()
    {
      
    Dictionary<string, int> dic = new Dictionary<string, int>();
    for (int i = 0; i < m_Data.Length; i++)
    {
    Console.WriteLine(m_Data[i]);
    dic.Add(m_Data[i], i);
    }
    GetString(dic);
     
    }
    static string[] m_Data = Enumerable.Range(1,9).Select(s=>s.ToString()).ToArray();
    static void GetString(Dictionary<string,int> dd)
    {
    Dictionary<string, int> dic = new Dictionary<string, int>();
    foreach (KeyValuePair<string, int> kv in dd)
    {
    for (int i = kv.Value + 1; i < m_Data.Length; i++)
    {
    Console.WriteLine(kv.Key + m_Data[i]);
    dic.Add(kv.Key + m_Data[i], i);
    }
    }
    if(dic.Count>0) GetString(dic);
    }
    /*
    1
    2
    3
    4
    5
    6
    7
    8
    9
    12
    13
    14
    15
    16
    17
    18
    19
    23
    24
    25
    26
    27
    28
    29
    34
    35
    36
    37
    38
    39
    45
    46
    47
    48
    49
    56
    57
    58
    59
    67
    68
    69
    78
    79
    89
    123
    124
    125
    126
    127
    128
    129
    134
    135
    136
    137
    138
    139
    145
    146
    147
    148
    149
    156
    157
    158
    159
    167
    168
    169
    178
    179
    189
    234
    235
    236
    237
    238
    239
    245
    246
    247
    248
    249
    256
    257
    258
    259
    267
    268
    269
    278
    279
    289
    345
    346
    347
    348
    349
    356
    357
    358
    359
    367
    368
    369
    378
    379
    389
    456
    457
    458
    459
    467
    468
    469
    478
    479
    489
    567
    568
    569
    578
    579
    589
    678
    679
    689
    789
    1234
    1235
    1236
    1237
    1238
    1239
    1245
    1246
    1247
    1248
    1249
    1256
    1257
    1258
    1259
    1267
    1268
    1269
    1278
    1279
    1289
    1345
    1346
    1347
    1348
    1349
    1356
    1357
    1358
    1359
    1367
    1368
    1369
    1378
    1379
    1389
    1456
    1457
    1458
    1459
    1467
    1468
    1469
    1478
    1479
    1489
    1567
    1568
    1569
    1578
    1579
    1589
    1678
    1679
    1689
    1789
    2345
    2346
    2347
    2348
    2349
    2356
    2357
    2358
    2359
    2367
    2368
    2369
    2378
    2379
    2389
    2456
    2457
    2458
    2459
    2467
    2468
    2469
    2478
    2479
    2489
    2567
    2568
    2569
    2578
    2579
    2589
    2678
    2679
    2689
    2789
    3456
    3457
    3458
    3459
    3467
    3468
    3469
    3478
    3479
    3489
    3567
    3568
    3569
    3578
    3579
    3589
    3678
    3679
    3689
    3789
    4567
    4568
    4569
    4578
    4579
    4589
    4678
    4679
    4689
    4789
    5678
    5679
    5689
    5789
    6789
    12345
    12346
    12347
    12348
    12349
    12356
    12357
    12358
    12359
    12367
    12368
    12369
    12378
    12379
    12389
    12456
    12457
    12458
    12459
    12467
    12468
    12469
    12478
    12479
    12489
    12567
    12568
    12569
    12578
    12579
    12589
    12678
    12679
    12689
    12789
    13456
    13457
    13458
    13459
    13467
    13468
    13469
    13478
    13479
    13489
    13567
    13568
    13569
    13578
    13579
    13589
    13678
    13679
    13689
    13789
    14567
    14568
    14569
    14578
    14579
    14589
    14678
    14679
    14689
    14789
    15678
    15679
    15689
    15789
    16789
    23456
    23457
    23458
    23459
    23467
    23468
    23469
    23478
    23479
    23489
    23567
    23568
    23569
    23578
    23579
    23589
    23678
    23679
    23689
    23789
    24567
    24568
    24569
    24578
    24579
    24589
    24678
    24679
    24689
    24789
    25678
    25679
    25689
    25789
    26789
    34567
    34568
    34569
    34578
    34579
    34589
    34678
    34679
    34689
    34789
    35678
    35679
    35689
    35789
    36789
    45678
    45679
    45689
    45789
    46789
    56789
    123456
    123457
    123458
    123459
    123467
    123468
    123469
    123478
    123479
    123489
    123567
    123568
    123569
    123578
    123579
    123589
    123678
    123679
    123689
    123789
    124567
    124568
    124569
    124578
    124579
    124589
    124678
    124679
    124689
    124789
    125678
    125679
    125689
    125789
    126789
    134567
    134568
    134569
    134578
    134579
    134589
    134678
    134679
    134689
    134789
    135678
    135679
    135689
    135789
    136789
    145678
    145679
    145689
    145789
    146789
    156789
    234567
    234568
    234569
    234578
    234579
    234589
    234678
    234679
    234689
    234789
    235678
    235679
    235689
    235789
    236789
    245678
    245679
    245689
    245789
    246789
    256789
    345678
    345679
    345689
    345789
    346789
    356789
    456789
    1234567
    1234568
    1234569
    1234578
    1234579
    1234589
    1234678
    1234679
    1234689
    1234789
    1235678
    1235679
    1235689
    1235789
    1236789
    1245678
    1245679
    1245689
    1245789
    1246789
    1256789
    1345678
    1345679
    1345689
    1345789
    1346789
    1356789
    1456789
    2345678
    2345679
    2345689
    2345789
    2346789
    2356789
    2456789
    3456789
    12345678
    12345679
    12345689
    12345789
    12346789
    12356789
    12456789
    13456789
    23456789
    123456789*/
      

  7.   

    int x[]=new int[9]
    {
       1,2,4,8,16,32,64,128,256,512  
    }
    各种翻转变换。
      

  8.   

      for (long i = 123456789; i < 987654321; i++)
                    Console.WriteLine(i);
      

  9.   

    给你最原始的方法,效率比较高。
    为了验证方便,算法里描述了1,2,3三个的情况,体现下思路
    思路:用二维数组char[3][],放三行数据,首行'1','2','3'三列;第二行'2','3'两列,第三行'3'一列,排列时,每行出一个元素,就是一个排列结果,穷举法
    static void Main()
            {
                char[][] a=new char[3][];  //3行字符,但列逐渐减少,此处首行'1','2','3'三列;第二行'2','3'两列,第三行'3'一列
                for(int i=0;i<3;i++)  //创建存放行的数组
                    a[i]=new char[3-i];
                for (int i = 0; i < a[0].Length; i++)  //初始化存放行的数组,首行'1','2','3'
                    a[0][i] = Convert.ToChar(i + 1+48);
                char[] result = new char[3];  //存放一次排列完成后结果            
                for (int r1 = 0; r1 < a[0].Length; r1++)  //开始排序
                {
                    result[0]=(a[0][r1]);
                    OutOne(1, a, a[0][r1]);
                    for (int r2 = 0; r2 < a[1].Length; r2++)
                    {
                        result[1] = (a[1][r2]);
                        OutOne(2, a, a[1][r2]);
                        for (int r3 = 0; r3 < a[2].Length; r3++)
                        {
                            result[2] = a[2][r3];
                            Console.WriteLine(new String(result));
                        }
                    }
                }
                Console.ReadLine();
            }
            static void OutOne(int p_index, char[][] p_array, char c)  //p_index当前行号,Up_Index上一行的行号,当前行存放的是:在上一行里去掉c后的结果
            {
                int Up_Index = p_index - 1;
                int i;
                for (i = 0; i < p_array[Up_Index].Length-1 && p_array[Up_Index][i] != c; i++)
                    p_array[p_index][i] = p_array[Up_Index][i];
                for (; i < p_array[Up_Index].Length - 1;i++ )
                    p_array[p_index][i] = p_array[Up_Index][i + 1];        }
    一看就有规律,可以改写成递归法,大家一起改吧
      

  10.   

    说明下:首行'1','2','3'三列;第二行'2','3'两列,第三行'3'一列
    其实第二、三行不一定是行'2','3'和行'3',如果第一行出的是2,那么第二行就是1,3;若第一行出的是3,第二行就是,1,2,依次类推
    同理,第三行是第二行 出 一个后,剩下的
    就是函数OutOne()描述的功能