资源描述:
《ACM算法设计实验题目汇总.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、ACM算法设计实验题目汇总1020PermutationwithRepetition11021双色Hanoi塔问题31022SearchNumber41023整数划分问题51024Counting61025输油管道问题81026IntegerFactorization91027邮局选址问题111031矩阵连乘问题131032最长公共子序列141033MAXSUM161034NumberTriangles171035编辑距离问题181036PebbleMerging191037租用游艇问题211038Minima
2、lmSums221040KnapsackProblem241041最优装载251042LectureHalls261043程序存储问题291048OptimalServices301049汽车加油问题301059子集树问题3210600-1Knapsack331061排列树问题361062ProblemDGeneralSearch381020PermutationwithRepetitionDescriptionR={r1,r2,…,rn}是要进行排列的n个元素。其中元素r1,r2,…,rn可能相同。试设计一个
3、算法,列出R的所有不同排列。编程任务:给定n以及待排列的n个元素。计算出这n个元素的所有不同排列。Input输入由多组测试数据组成。每组测试数据的第1行是元素个数n,1<=n<=500。接下来的1行是待排列的n个元素。Output对应每组输入,将计算出的n个元素的所有不同排列输出,每种排列单独一行。最后1行中的数是排列总数。SampleInput4aaccSampleOutputaaccacacaccacaaccacaccaa6#include#includeusingn
4、amespacestd;intans;intok(charstr[],inta,intb){if(b>a)for(inti=a;i
5、],str[i]);perm(str,k+1,m);swap(str[k],str[i]);}}}intmain(intargc,char*argv[]){charstr[1000];intn;while(scanf("%d",&n)!=EOF){ans=0;scanf("%s",str);perm(str,0,n-1);printf("%d",ans);}return0;}1021双色Hanoi塔问题DescriptionA、B、C是3个塔座。开始时,在塔座A上有一叠共n个圆盘,这些圆盘自下而上,由大到小
6、地叠在一起。各圆盘从小到大编号为1,2,……,n,奇数号圆盘着蓝色,偶数号圆盘着红色,如图所示。现要求将塔座A上的这一叠圆盘移到塔座B上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则:规则(1):每次只能移动1个圆盘;规则(2):任何时刻都不允许将较大的圆盘压在较小的圆盘之上;规则(3):任何时刻都不允许将同色圆盘叠在一起;规则(4):在满足移动规则(1)-(3)的前提下,可将圆盘移至A,B,C中任一塔座上。试设计一个算法,用最少的移动次数将塔座A上的n个圆盘移到塔座B上,并仍按同样顺序叠置。编程任务:对
7、于给定的正整数n,编程计算最优移动方案。Input输入由多组测试数据组成。每组测试数据的第1行是给定的正整数n。Output对应每组输入,输出的每一行由一个正整数k和2个字符c1和c2组成,表示将第k个圆盘从塔座c1移到塔座c2上。SampleInput3SampleOutput1AB2AC1BC3AB1CA2CB1AB#includeusingnamespacestd;intmain(){voidhanoi(int,char,char,char);intm;cin>>m;hanoi(m,'
8、A','B','C');return0;}voidhanoi(intn,chara,charb,charc){voidmove(int,char,char);if(n==1)move(n,a,b);else{hanoi(n-1,a,c,b);move(n,a,b);hanoi(n-1,c,b,a);}}voidmove(intn,charx,chary){cout<