led护眼灯真的护眼吗:关于C语言的一道题目

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/20 07:35:17
如何从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)
return 0;
a = (int *)malloc(sizeof(int)*n);
if (a)
{
combin(0, n);
printf("\n");
free(a);
}
return 0;
}

用递归法解决,很容易哦

121212

great_wh解法漂亮,佩服!佩服~

对,用递归很容易实现的。

radix排序.这种排序好,你自已去查一下吧.如果你不是学算法.