好贷网好贷款

组合类

发布时间:2016-12-3 21:49:23 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"组合类",主要涉及到组合类方面的内容,对于组合类感兴趣的同学可以参考一下。

nyoj-19 擅长排列的小明 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述小明十分聪明,而且十分擅长排列计算。比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想为难他,在这5个数字中选出几个数字让他继续全排列,那么你就错了,他同样的很擅长。现在需要你写一个程序来验证擅长排列的小明到底对不对。 输入第一行输入整数N(1<N<10)表示多少组测试数据, 每组测试数据第一行两个整数 n m (1<n<9,0<m<=n) 输出 在1-n中选取m个字符进行全排列,按字典序全部输出,每种排列占一行,每组数据间不需分界。如样例样例输入 2 3 1 4 2 样例输出 1 2 3 12 13 14 21 23 24 31 32 34 41 42 43 来源 [hzyqazasdf]原创上传者 hzyqazasdf    import java.util.Scanner; public class NYOJ_19_擅长排列的小明 { //chenguichao 擅长排列的小明 Accepted 350 8550 java 08-26 21:40:51 /** * @param args */static int n,k; static int a []; static boolean [] vis; private static void print(int r) { int i,j; if(r==k+1){ for(i=1; i<=k; i++) System.out.print(a[i]); System.out.println(); } else{ for(i=1; i<=n; i++){ if(vis[i]==false){ a[r]=i; vis[i]=true; print(r+1); vis[i]=false; } } } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); while(N-->0){ n = sc.nextInt(); k = sc.nextInt(); a =new int [n+2]; vis = new boolean[n+2]; print(1); } } } 和其(nyoj-19)相似的一题: D的小L(nyoj-366) 时间限制:4000 ms | 内存限制:65535 KB 难度:2 描述 一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给匡匡出了个题目想难倒匡匡(小L很D吧),有一个数n(0<n<10),写出1到n的全排列,这时匡匡有点囧了,,,聪明的你能帮匡匡解围吗? 输入 第一行输入一个数N(0<N<10),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个整数x(0<x<10) 输出 按特定顺序输出所有组合。 特定顺序:每一个组合中的值从小到大排列,组合之间按字典序排列。 样例输入 2 2 3样例输出 12 21 123 132 213 231 312 321来源 原创 上传者 kapop import java.util.Scanner; public class nyoj_366_D的小L_组合类 { static boolean vis[]; //真的不会这样的组合数,不过分析了一遍,看懂了,可是对于以后如何运用 --递归+回溯--还是不太明晰*_*,@_@ static int a[]; static int n; public static void print(int k){ int i; if(k==n+1){ for( i=1;i<n+1;i++) System.out.print(a[i]); System.out.println(); //return ; } else{ for( i=1;i<=n;i++){ if(vis[i]==false){ a[k]=i; vis[i]=true; print(k+1); vis[i]=false; } } } } public static void main(String[] args) { Scanner input=new Scanner(System.in); int N=input.nextInt(); while(N-->0){ n=input.nextInt(); vis=new boolean[n+2]; a=new int[n+2]; print(1); } } }   c/c++STL实现:   #include<iostream>//next_permutation #include<algorithm> using namespace std; //java 没有@_@++ int main() { int T,i,n; int a[9]={1,2,3,4,5,6,7,8,9}; cin>>T; while(T--) { cin>>n; // sort(a,a+n); 每次开始之前不用重新排列,因为生成所有全排列之后虽然跳出了do循环但是数组又回到了初始的升序状态 do { for(i=0;i<n;++i) cout<<a[i]; cout<<endl; }while(next_permutation(a,a+n)); // for(i=0;i<9;++i) // cout<<a[i]; //测试跳出循环后输出1 2 3 4 5 6 7 8 9 即又回到了初始升序的状态 // } return 0; }    

上一篇:C++多继承的二义性
下一篇:myeclipse自动化提示

相关文章

关键词: 组合类

相关评论