您的位置:首页 > 其它

NYOJ--32(搜索)-题目-----------------------------组合数

2015-03-02 23:08 288 查看
package search;

/*组合数
时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。
输入
输入n、r。
输出
按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
样例输入
5 3
样例输出
543
542
541
532
531
521
432
431
421
321*/

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;

public class search_32 {

private static int r;

public static void main(String[] args) {

Scanner sc = new Scanner(new BufferedReader(new InputStreamReader(System.in)));

int n = sc.nextInt();
r = sc.nextInt();

for (int i = n; i >= r; i--) {
dfs(i + "", i);
}
sc.close();
}

private static void dfs(String number, int n) {

if (number.length() == r) {
System.out.println(number);
return;
}

// 逐个逐个添加到尾部,然后递归
for (int i = n - 1; i > 0; i--) {
dfs(number + i, i);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息