《C语言第五六次作业》.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
#includestdio.h int main() { freopen(file.out,w,stdout); int n,i,j,k=1,x=1,y=1,s=1,t,tot; int p[10][10]; scanf(%d,n); tot=n*n;t=n; while (1) { while (x=t) p[x++][y]=k++;/*go right*/ x--;k--;if (k==tot) break;/*如果已经填充了n*n个了就退出循环*/ while (y=t) p[x][y++]=k++;/*go down*/ y--;k--; while (x=s) p[x--][y]=k++;/*go left*/ x++;k--; while (ys) p[x][y--]=k++;/*go up*/ y++;k--; s++;t--;/*矩阵缩小一层*/ if (k==tot) break;} for (i=1;i=n;i++) { for (j=1;j=n;j++) printf(%5d,p[j][i]); printf(\n);} exit(0); } 11级第六次作业---全排列数的生成 5.【问题描述】输入整数N( 1 = N = 10 ),生成从1~N所有整数的全排列。 【输入形式】输入整数N。 【输出形式】输出有N!行,每行都是从1~N所有整数的一个全排列,各整数之间以空格分隔。各行上的全排列不重复。输出各行遵循“小数优先”原则, 在各全排列中,较小的数尽量靠前输出。如果将每行上的输出看成一个数字,则所有输出构成升序数列。 本题解析: 这道题如果做法太过暴力的话可能会超时。于是我们用一种半数学的方法。也就是说n的全排列按顺序排好的话,前(n-1)!个的第一位都是1,第二位就跟(n-2)!有关…那么我们就可以通过第x个直接判断从第一位到第n位应该是第几个数,如果遇到这个数已经被使用了的情况的话就将这个数+1.以此类推…… #includestdio.h int main() { int i,j,k,n,s,f,p; int jc[11]={1,1,2,6,24,120,720,5040,40320,362880,3628800};/*0-10的阶乘*/ int judge[11];/*用来判断1-10是否已经输出过*/ scanf(%d,n); for (i=1;i=jc[n];i++)/*n的全排列共n!个*/ { s=i; memset(judge,0,sizeof(judge)); for (j=0;jn;j++)/*n的全排列共n位*/ { if (j!=0) printf( ); p=(s-1)/jc[n-1-j]+1;/*p表示这次输出的数应该是第几个没出现过的数*/ for (k=1;k=p;k++) if (judge[k]) p++;/*如果比p小的数中有的数出现过那么p就只能+1*/ printf(%d,p); judge[p]=1; s=(s-1)%jc[n-1-j]+1;/*去掉(n-1)!项*/ } /*其实这个题的做法类似Taylor展开式,还是比较显然的*/ printf(\n); } return 0; } 11级第六次作业---单词排序(命令行参数) 6.【问题描述】 编写一个程序,从一个文件中读入单词(即:以空格分隔的字符串),并对单词进行排序,删除重复出现的单词,然后将结果输出到另一个文件中。 【输入形式】 源文件名和目标文件名在执行时作为程序命令行参数输入,例如若程序名为sort, 源文件名和目标文件名分别为sort.in和sort.out,则命令行为:sort? sort.in? sort.out。 程序将从当前目录下sort.in文件中读入单词。 【输出形式】 对单词进行排序,删除重复出现的单词,然后将结果输出到文件sort.out中。 【输入样例】 假如sort.in文件内容如下: rrr? sss? aaa? bbb? ccc?? ddf? aaa? dd【输出样例】 sort.out文件内容为: aaa bbb ccc dd? ddf? rrr sss 【样例说明】

文档评论(0)

tangtianxu1 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档