查看: 3570|回复: 2
打印 上一主题 下一主题

试题之全排序

[复制链接]
跳转到指定楼层
沙发
发表于 2014-8-5 15:29:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 伊海 于 2014-8-5 15:36 编辑

写一个程序,对任意一串字符串进行全排序。如123的全排序为:123,132,213,231,312,321.
  1. #include "stdafx.h"
  2. //读者在这里思考两个问题:
  3. //1.这个函数的作用是什么?
  4. //2.inline是做什么用的?
  5. inline void Swap(char *a, char *b)
  6. {
  7.     /* 交换a和b */
  8.     char temp = *a;
  9.     *a = *b;
  10.     *b = temp;
  11. }
  12. //读者想想如何列举出所有的排列顺序
  13. void Perm(char list[], int k, int m)
  14. {
  15.     /* 生成list [k:的所有排列方式 */
  16.     int i = 0;
  17.     /* 输出一个排列方式 */
  18.     if (k == m)
  19.     {
  20.        for (i = 0; i <= m; i++)
  21.        {
  22.            putchar(list);
  23.        }
  24.        putchar('\n');
  25.     }
  26.     else
  27.     {
  28.        /* list[k:有多个排列方式 */
  29.        /* 递归地产生这些排列方式 */
  30.        for (i = k; i <= m; i++)
  31.        {
  32.            Swap (&list[k], &list);
  33.            Perm (list, k+1, m);
  34.            Swap (&list [k], &list );
  35.        }
  36.     }
  37. }
  38. //测试
  39. int main(int argc, char* argv[])
  40. {
  41.    
  42.     char s[] = "1234";
  43.     Perm(s, 0, 3);
  44.     return 0;
  45. }
复制代码

编译结果:
1234
1243
1324
1342
1432
1423
2134
2143
2314
2341
2431
2413
3214
3241
3124
3142
3412
3421
4231
4213
4321
4312
4132
4123
请按任意键继续. . .


回复

使用道具 举报

板凳
发表于 2014-8-5 15:34:53 | 只看该作者
这是神马东西完全不懂哎
回复 支持 反对

使用道具 举报

地板
发表于 2014-8-5 15:37:40 | 只看该作者
高大上。。{:soso_e179:}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表