题目1120:全排列

时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:2749

解决:669

题目描述:

给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。

我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列。

输入:

输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。

输出:

输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:

已知S = s1s2...sk , T = t1t2...tk,则S < T 等价于,存在p (1 <= p <= k),使得

s1 = t1, s2 = t2, ..., sp - 1 = tp - 1, sp < tp成立。

样例输入:

abc

样例输出:

abc

acb

bac

bca

cab

cba

提示:

每组样例输出结束后要再输出一个回车。

来源:

2008年北京大学图形实验室计算机研究生机试真题

//开始一看最多只有六个元素,用了递归,果断超时

超时代码(以前做过一个没有超时,可以得出所有答案的,只是复杂度较高)

#include

#include

char a[10];

char English[28]="0abcdefghijklmnopqrstuvwxyz";

struct node

{

int v,flag;

}b[10];

int num[10];

void Found(int x,int y,int n)

{

int i;

num[x]=b[y].v;

if(x+1==n)

{

for(i=0;i

{

printf("%c",English[num[i]]);

}

puts("");

return;

}

for(i=0;i

{

if(b[i].flag==0)

{

b[i].flag=1;

Found(x+1,i,n);

b[i].flag=0;

}

}

}

int main()

{

int i,j,n,m;

while(scanf("%s",a)!=EOF)

{

n=strlen(a);m=0;

memset(b,0,sizeof(b));

for(i=0;i

{

for(j=1;j<=26;j++)

{

if(a[i]==English[j])

{

b[m++].v=j;

break;

}

}

}

for(i=0;i

{

b[i].flag=1;

Found(0,i,n);

b[i].flag=0;

}

puts("");

}

return 0;

}

最后利用了C++中STL库的模板,叫做“下一次排序”的函数:next_permutation

有兴趣的同学可以查一下,很好用

AC代码:

#include

#include

#include

using namespace std;

char a[10];

int main()

{

int i,j,n,m;

while(scanf("%s",a)!=EOF)

{

n=strlen(a);

do

{

printf("%s\n",a);

}while(next_permutation(a,a+n));

puts("");

}

return 0;

}

c语言题目1120,九度题目1120:全排列相关推荐

  1. 九度 题目1335:闯迷宫 题目1365:贝多芬第九交响曲

    转载请注明本文地址http://blog.csdn.net/yangnanhai93/article/details/40718149 简单说说宽度优先搜索BFS 说实话,这是第一个自己写的宽度优先搜 ...

  2. 九度 题目1044:Pre-Post

    转载请注明本文链接http://blog.csdn.net/yangnanhai93/article/details/40658571 题目链接:http://ac.jobdu.com/problem ...

  3. 九度 题目1548:平面上的点

    题目描述: 给定平面上的n个点,任意做一条直线,求至多能有几个点恰好落在直线上. 输入: 包含多组测试数据,每组测试数据由一个整数n(0<=n<=100)开始,代表平面上点的个数. 接下去 ...

  4. 九度 题目1394:五连击数组

    转载请注明本文链接http://blog.csdn.net/yangnanhai93/article/details/40506571 题目链接:http://ac.jobdu.com/problem ...

  5. 九度 题目1457:非常可乐

    题目来源:http://ac.jobdu.com/problem.php?pid=1457 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:514 解决:242 题目描述: 大家一定觉的运 ...

  6. 九度 题目1421:Abor

    转载声明本文地址 http://blog.csdn.net/yangnanhai93/article/details/40563285 题目链接:http://ac.jobdu.com/problem ...

  7. 九度题目1173:查找

    原题链接:http://ac.jobdu.com/problem.php?pid=1173 题目描述: 输入数组长度 n  输入数组      a[1...n]  输入查找个数m  输入查找数字b[1 ...

  8. 九度 题目1341:艾薇儿的演唱会(40分)

    题目描述: 艾薇儿今天来到了中国,她计划两天后在哈尔滨举行一场个人的演唱会.由于出现了紧急情况,演唱会的举办方要求艾薇儿提前举行演唱会.艾薇儿现在在北京,她需要找出一条从北京到哈尔滨耗时最短的线路,以 ...

  9. 九度题目1440:Goldbach's Conjecture

    题目描述: Goldbach's Conjecture: For any even number n greater than or equal to 4, there exists at least ...

最新文章

  1. 如何给iOS 分类添加 属性
  2. Javascript鼠标滚轮事件兼容写法
  3. JS跨域访问(ajax跨域)
  4. The Windows Subsystem for Linux optional component is not enabled. Please enable it and try again.
  5. hostswap dcevm
  6. Java原子操作Atomic
  7. html ios 定位吗,iOS对html简单解析
  8. JDBC元数据操作(一)-- DatabaseMetaData接口详解
  9. mysql 数据备份方案_MySQL常见备份方案
  10. c语言cin cou头文件,c+第五次实验
  11. mysql on 子句_ON子句中的MySQL未知列
  12. 使用VBScript和ADSI
  13. 南开大学2019年数学分析考研试题
  14. Excel 2010启用宏
  15. 10.curry 方法
  16. 计费在线计费和离线计费
  17. 北航大学计算机教学平台,信息学院赴北京航空航天大学计算机教学实验中心参观交流...
  18. 听说你还在纠结自己没访问量?成不了“博客专家”?
  19. Mac 下配置使用windows局域网共享打印机
  20. sqlloader导出数据指定分隔符_来一份数据库全家桶~

热门文章

  1. 【java】深入探讨 Java 类加载器
  2. Error: getaddrinfo ENOTFOUND localhost
  3. Linux Shell 读取用户输入
  4. JDK的bin目录下所有程序的使用介绍
  5. 深入分析之Cluster层
  6. 免责协议怎么写_离婚后房产过户协议怎么写?需要公证吗?
  7. Spring Boot + Security + Thymeleaf + Activiti 快速开发平台项目
  8. Java中 volatile 关键字的最全总结,赶快给自己查缺补漏吧!
  9. 设计模式是什么鬼(模板方法)
  10. 005---基于UDP的套接字