北师大ACM新手指导第七题-枚举提高
来源:互联网 发布:python 打印数组 编辑:程序博客网 时间:2024/05/01 00:47
北师大ACM新手指导第七题-枚举提高Time Limit: 1000msMemory Limit: 65536KB64-bit integer IO format: %lld Java class name: Main 如果你认为枚举只是一个很简单的算法那就大错特错了,上一题让大家求素数,所需要的枚举只是数轴上的线性枚举,但是,实际比赛中,枚举的维度很可能是二维的,枚举的方向也可能不是线性的。所以下面通过一道例题给大家介绍一种枚举的方法。考虑下面一个问题: 输入一个数N (0<N<8)和一个数K (0<k<=5),要求:从1~N这N个数字中,任意选出K个数字(数字可以重复选),请按大小输出所有的方案。 例如,输入: 3 2 则对应的输出应该为: 11 12 13 21 22 23 31 32 33 对于这道题,很明显,简单的FOR循环是不可能解决的。 请认真阅读以下的答案代码,如果可能,在IDE环境通过调试来查看整个程序运行过程,理解其中递归程序的调用过程。 如果一开始看不懂,请不要泄气,我也是看了一周才大概看懂的。 #include 〈stdio.h〉int n,k;int tt[9]; /* tt[pt]表示第pt个数的取值 */void di(int pt){ int i; if (pt>k) /* 如果前k个数的值都已确定,则输出 */ { for (i=1; i<=k; ++i) printf("%d",tt[i]); printf("\n"); } else { for (i=1; i<=n; ++i) { tt[pt] = i; di(pt+1); } } } int main() { scanf("%d%d", &n, &k); di(1); return 0; } Input两个数,N和KOutput按大小输出所有的方案。 每个方案一行。Sample Input3 2Sample Output111213212223313233Hint请看懂代码之后,自己写一遍,不要用我的代码。 以上代码也是经过处理,直接复制提交将不能通过。 只有自己写一遍才行。SourceTang Qiao @ BNU来源: https://www.bnuoj.com/bnuoj/problem_show.php?pid=4117
#include <cstdio>#include <cstring>char A[8];void Q_P(int N,int K,int Set){ if(K==Set) puts(A+1);//已经完成了排列 输出 else { for(int i=1;i<=N;i++) { A[Set+1] = '0'+i; Q_P(N,K,Set+1); } }}int main(){ // freopen("D:\\test.txt","r",stdin); int N,K; while(~scanf("%d %d",&N,&K)) { memset(A,0,sizeof(A));//这条非常重要 不论是第一次将数组其余原始置为'\0',还是其后清空数组 Q_P(N,K,0); } return 0;}
0 0
- 北师大ACM新手指导第七题-枚举提高
- 北师大ACM新手指导第十四题-灵活运用枚举
- ACM 指导
- 第七道ACM程序题
- MMORPG新手指导
- ubuntu编译程序新手指导
- ubuntu编译程序新手指导
- java新手学习指导
- JAVA新手求指导!
- cocos2d 新手指导
- iOS设计新手指导
- Hadoop新手学习指导
- Hadoop新手学习指导
- iOS设计新手指导
- Hadoop新手学习指导
- Hadoop新手学习指导
- Hadoop新手学习指导
- Hadoop新手学习指导
- 国内登陆dropbox的好方法
- Unity3d制作一个简单的打开保存对话框-按钮2
- 4118 全排列
- 美团推荐算法实践
- Bzoj3533:[Sdoi2014]向量集:线段树+凸包+三分
- 北师大ACM新手指导第七题-枚举提高
- 基于机器学习方法的POI品类推荐算法
- Lucene入门与深入代码
- 1439: 可排回文 水题 有小坑
- 实例详解机器学习如何解决问题
- linux-rpm安装jdk
- C++设计模式浅识桥接模式
- (Paper)Network in Network网络分析
- 经典计算机视觉论文笔记——《ImageNet Classification with Deep Convolutional Neural Networks》