算法分析与设计实验报告第1次实验姓名学号201班级时间3.5上午地点四合院实验名称字典序问题实验目的通过上机实验,要求掌握字典序问题的问题描述、算法设计思想、程序设计。实验原理使用递归的算法,根据不同的输入用例,能准确的输出用例的编码。实验步骤①先设计一个函数计算以i开头长度为k的字符串的个数;②再设计一个函数计算长度为k的所有升序字符串的个数;③输入字符串调用函数1和2,计算出编码;④用文件输入想要计算的字符串,求得的编码再输出到文件中。关键代码//计算以i开头长度为k的字符串的个数intf(inti,intk){intsum=0;if(k==1){return1;}else{for(intj=i+1;j=26;j++){sum=sum+f(j,k-1);}}returnsum;}//计算长度为k的所有升序字符串的个数intg(intk){intsum=0;for(inti=1;i=26;i++){sum=sum+f(i,k);}returnsum;}intSUM(stringa){intb=a[0]-'a'+1;intsum=0;intn=a.size();for(inti=1;i=n-1;i++){sum=sum+g(i);}for(inti=1;ib;i++){sum=sum+f(i,n);}for(inti=1,c=b;in;i++){intt=a[i]-'a'+1;intlen=n-i;for(intj=c+1;jt;j++)sum=sum+f(j,len);c=t;}returnsum+1;}测试结果附录:完整代码#includeiostream#includestring#includefstreamusingnamespacestd;//计算以i开头长度为k的字符串的个数intf(inti,intk){intsum=0;if(k==1){return1;}else{for(intj=i+1;j=26;j++){sum=sum+f(j,k-1);}}returnsum;}//计算长度为k的所有升序字符串的个数intg(intk)实验心得一开始看到这个题目我想到了用排列组合的知识来解,小班课上同学讲解的方法也是这个方法,后来我看课本上是利用递归的方法,于是我便尝试用递归的方法来解决这个问题,一开始并不顺利,我便上网查找资料和代码,通过阅读别人写过的代码,自己一点一点写出了解这个问题的代码。通过这个实验让我对递归实现一个问题有了更好的认识,同时一个题有多种解法也对我有很大的启发。实验得分助教签名{intsum=0;for(inti=1;i=26;i++){sum=sum+f(i,k);}returnsum;}intSUM(stringa){intb=a[0]-'a'+1;intsum=0;intn=a.size();for(inti=1;i=n-1;i++){sum=sum+g(i);}for(inti=1;ib;i++){sum=sum+f(i,n);}for(inti=1,c=b;in;i++){intt=a[i]-'a'+1;intlen=n-i;for(intj=c+1;jt;j++)sum=sum+f(j,len);c=t;}returnsum+1;}intmain(intargc,char**argv){ifstreamin(input1.txt);ofstreamout(output1.txt);cout文件中读入的数据的行数为:;intn;inn;coutnendl;cout文件中读入的每行数据为:endl;for(inti=1;i=n;i++){stringa;ina;coutaendl;outSUM(a)endl;}cout请到文件中查看结果endl;return0;}