关于C语言的一道题目

来源:百度知道 编辑:UC知道 时间:2024/05/15 03:17:38
如何从n个数挑选r个数并将这r个数字降序排序输出?例如:n=5,r=3时,输出的结果为:543,542,541,532,531,521,432,431,421,321;问题的关键是r=3时是容易用三个循环解决的,但是r和n很大时就会出现很多问题,希望有识之士帮我解决这个问题,谢谢

运行示例:
input n r: 5 3
543,542,541,532,531,521,432,431,421,321

程序源码如下:
#include <stdio.h>
#include <stdlib.h>

int *a;
int n;
int r;
int is_first = 1;

void combin(int index, int max_num)
{
int i;
if (index >= r)
{
if (!is_first)
printf(",");
else
is_first = 0;
for (i = 0; i < index; i++)
printf("%d", a[i]);
return;
}
for (i = max_num; i >= 1; i--)
{
a[index] = i;
combin(index + 1, i - 1);
}
}

int main()
{
int i;
printf("input n r: ");
scanf("%d%d", &n, &r);
if (n < r)