2 hehualee hehualee 于 2016.01.23 09:31 提问

一个很难的程序难题,关于m选n

求一个m选n的算法,比如4选2,输出12 13 14 23 24 34
m选n的m和n要自由输入,怎么实现

7个回答

caozhy
caozhy   Ds   Rxr 2016.01.23 09:34
已采纳
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.01.23 11:31

这个就是数学里面的组合问题,百度下实现算法呗。

91program
91program   Ds   Rxr 2016.01.23 10:48
Mr_dsw
Mr_dsw   Ds   Rxr 2016.01.23 11:13

经典算法题,你去搜索下能找到

enpterexpress
enpterexpress   Rxr 2016.01.23 14:14
coderCold
coderCold   2016.01.28 20:28

void print_subset(int cur,int m ,int n, int *A){
if(cur == n){ // 打印结果
for(int i = 0; i < cur; i++) printf("%d ", A[i]);
printf("\n");
return;
}
int s = cur?A[cur-1]+1:0;
for(int i = s; i < m; i++){
A[cur] = i;
print_subset(cur+1, m, n, A);
}
}

int main(){
int A[10];
print_subset(0,5,2,A);
return 0;
}


结果:
0 1
0 2
0 3
0 4
1 2
1 3
1 4
2 3
2 4
3 4

coderCold
coderCold   2016.01.28 20:30

额,上面个格式弄错了,重新发一下:

void print_subset(int cur,int m ,int n, int *A){
    if(cur == n){ // 打印结果
        for(int i = 0; i < cur; i++) printf("%d ", A[i]);
        printf("\n");
        return;
    }
    int s = cur?A[cur-1]+1:0;
    for(int i = s; i < m; i++){
        A[cur] = i;
        print_subset(cur+1, m, n, A);
    }
}

int main(){
    int A[10];
    print_subset(0,5,2,A);
    return 0;
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
和尚特烦恼2
题目描述和尚解决了上一次的难题之后。又碰到了新的难题。这次也是关于素数的。一位施主首先把素数编号。最小的素数2编号为1,然后依次增加。施主要要求和尚迅速回答出对应编号的素数。输入输入数据有多组,输入数据有多组,每组数据首先输入一个整数n(n&amp;lt;100). 然后有n个正整数m(m&amp;lt;10000).输出对于每个正整数编号,输出对应的素数每个输出占一行样例输入3 1 2 3 样例输出2 3 5 ...
【学校内部OJ - 1205】因式分解问题
如果说,难题自己无法坚持去攻克,总是逃避、逃避、逃避,那么又怎会懂得“山重水复疑无路,柳暗花明又一村”之感呢?带着满心的决心,让我们一起走进今天的——因式分解问题!
洛谷 P2051 [AHOI2009]中国象棋
超难的递推
【BZOJ1801】【AHOI2009】中国象棋(动态规划)
题面题目描述这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法。大家肯定很清楚,在中国象棋中炮的行走方式是:一个炮攻击到另一个炮,当且仅当它们在同一行或同一列中,且它们之间恰好 有一个棋子。你也来和小可可一起锻炼一下思维吧!输入格式:一行包含两个整数N,M,之间由一个空格隔开。输出格式:总共的方案数,由于
山东理工ACM【2105】小泉的难题
小泉的难题 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 机械实验班有个同学叫小泉,有一天数学老师给小泉布置了一道个人作业,给小泉M(M 输入 输入包括M+1行,第一行是两个正整数M、N;M表示总共多少组数据,下面M行每行包含N个正整数,每个正整数的值不会超过10^9。(输入数据之
【bzoj1801】【AHOI2009】【chess中国象棋】【组合数学】
Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮。 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧. Input 一行包含两个整数N,M,中间用空格分开. Output 输出所有的方案数,由于值比较大,输出其mod 9999973 Sample Input 1 3 Sample Output
排列组合n个元素中选取m个元素
1.代码
数据结构(ZKNU OJ) 猴子选大王(循环链表解法)
Description有m个猴子围成一圈,按顺时针编号,分别为1到m。现打算从中选出一个大王。经过协商,决定选大王的规则如下:从第一个开始顺时针报数,报到n的猴子出圈,紧接着从下一个又从1顺时针循环报数,...,如此下去,最后剩下来的就是大王。Input第一行是一个正整数T表示测试数据的组数。下面共有T行,每行两个整数m和n,用一个空格隔开,分别表示猴子的个数和报数n。1≤m≤100,1≤n≤20...
猴子选大王(约瑟夫环问题)两种解决方案
问题: 有M只猴子围成一圈,按序每只从1到M中的编号,打算从中选出一个大王;经过协商,决定出选大王的规则:从第一个开始循环报数,数到N的猴子出圈,最后剩下来的就是大王。要求:从键盘输入M、N,编程计算哪一个编号的猴子成为大王 示例: 比如有5只猴子,从1到3报数,则选大王的步骤如下: 第一次报数:1->2->3 //3淘汰出圈 第二次报数:4->5->1 //1淘汰出圈 第
小泉的难题 (sdut oj)
小泉的难题 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 机械实验班有个同学叫小泉,有一天数学老师给小泉布置了一道个人作业,给小泉M(M Input 输入包括M+1行,第一行是两个正整数M、N;M表示总共多少组数据,下面M行每行包含N个正整数。(输入数据之间