编程算法,java,组合:求出n个数中取出k个数的组合,编程终于成功了!!!!需要的自己参考一下哈,哈哈

packagecombination_n_k;/*n个数选择k个出来*123456789,选择4个*首先肯定是1234*其次1235,1236...*最后是6789,跳出... package combination_n_k;
/*n个数选择k个出来
* 123456789,选择4个
* 首先肯定是1234
* 其次1235,1236...
* 最后是6789,跳出循环
*
* 由本组合推出下一个组合,递推思想:
* 把本组合与最后一组合 倒回来个相比较
* :1234---6789,4<9,4+1=5-->1235,1236
* 后面的依次加一
* 3589-->36,6+1,6+1+1
*
* 最后看是否到了最后一个组合,跳出循环
*
*
* */
public class Test1 {

public static void main(String[] args) {
int n = 7;
int k = 3;
com(n, k);
}

// 组合函数
static void com(int n, int k) {// 1-n里面取k个组合
if (n < k || n <= 0 || k <= 0) {
System.out.println("n,k数据输入不合理");
return;
}
int[] a = new int[k + 1];
int[] fg = new int[k + 1];// 标记对照
int count = 1;

for (int i = 1; i <= k; i++) {
a[i] = i;
fg[i] = i - k + n;// 12345,3,fg就是(345)
}
while (true) {
System.out.print("第" + (count++) + ":\t");
for (int i = 1; i <= k; i++)
System.out.print(a[i] + "\t");
System.out.println();

if (a[1] == n - k + 1)
break;// 跳出条件

for (int i = k; i >= 1; i--) {
if (a[i] < fg[i]) {// 那个数小于标记,加一
a[i]++;// 123456789,3589->3678(5->6,6+1,6+1+1)
for (int j = i + 1; j <= k; j++)
a[j] = a[j - 1] + 1;// 后面的数,依次加一升序
break;
}// if
}// for i

}// while

}

}
展开
 我来答
JIQIAOPAN
2014-01-13
知道答主
回答量:6
采纳率:0%
帮助的人:8511
展开全部
刚刚开始学java的飘过。。。。不会。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
带泥土豆片
2014-01-13
知道答主
回答量:34
采纳率:0%
帮助的人:11.7万
展开全部
深奥啊

不懂啊
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式