嘿嘿,第一写,也不知道要写什么东西哦:)
今天在论坛上看到Google的一道面试题,呵呵,顺便做了一下哦(有错误的高手指点一下啦)!
/**
*<question>
* 求组合数
* 求n个数(1....n)中k个数的组合....
* 如:combination(5,3)
* 要求输出:543,542,541,532,531,521,432,431,421,321
* </question>
* @language c
* @author bbflyerwww
*/
#include<stdio.h>
#define MAX 100
struct {
int num[MAX];
int k;
}sk;
int cr;
void combination(int x, int y)
{
if(y == 0) {
for(int i = 0; i <= sk.k; i++)
printf("%d", sk.num[i]);
printf("/t");
cr ++;
if(cr == 5){
cr = 0;
printf("/n");
}
}
else {
for(int i = x; i >= y; i--){
sk.k++;
sk.num[sk.k] = i;
combination(i-1, y-1);
sk.k--;
}
}
return ;
}
int main()
{
int m, n;
while(1) {
scanf("%d %d", &n, &m);
if(n == 0 && m == 0)
break;
sk.k = -1;
cr = 0;
combination(n, m);
printf("/n");
}
return 0;
}
感觉编程最重要的是思想!:)上论坛和高手们交流一下愉快的事!