请求一个C程序的算法,或者希望能给出整个代码(关于组合的)

harryxh 2003-10-21 11:24:40
题目:找出从自然数1,2,…,n中任取r个数的所有组合,并打印出来。(注:只能用C语言,而且要用递归的方法来实现)
...全文
32 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
harryxh 2003-10-22
  • 打赏
  • 举报
回复
顶楼的对不住了,因为小弟的分值有限,我已经分给了2,3楼的朋友,在这里
向你说声抱歉了,对不起。
ZhangYv 2003-10-21
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
const int MAXSIZE = 80;
int N,M;
int A[MAXSIZE], B[MAXSIZE];
void Print()
{
int i;
for (i = 0; i < M; ++i)
printf("%d ", B[i]);
printf("\n");
}

void Com(int n, int m)
{
int i;
for (i = n; i >= m; --i){ //抽屉原理
B[m] = A[i];
if (m > 0)
Com(n-1,m-1);
else
Print();
}
}
int main()
{
int i;
/* printf("%s", "Input N M = ");
scanf("%d%d", &N,&M);
*/
N = 5;
M=3;
if (N > MAXSIZE)
return 1; //越界
for (i = 0; i < N; ++i)
A[i] = i+1;
Com(N-1,M-1);
system("pause");
return 0;
}
hyhu 2003-10-21
  • 打赏
  • 举报
回复
我当你的n和r是固定的!
#define MAX XXXX //XXXX为r的值
给出核心函数
static int row;
void count (flg,r,row)
{
for (int i=flg+1;i++;i<n)
{
if (r==MAX) {
row++;
break;
}
else
{
lat[row][i]=i;
count(i,++r,row);
}
}
}

可能用问题,没用太多时间推敲!!
zhouqingyuan 2003-10-21
  • 打赏
  • 举报
回复
UP
showming 2003-10-21
  • 打赏
  • 举报
回复
我刚刚把楼上的修改了一下,完全可以在TC2.0环境运行了!
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 80

int N,M;
int A[MAXSIZE], B[MAXSIZE];
void Print()
{
int i;
for (i = 0; i < M; ++i)
printf("%d ", B[i]);
printf("\n");
}

void Com(int n, int m)
{
int i;
for (i = n; i >= m; --i){ /*抽屉原理*/
B[m] = A[i];
if (m > 0)
Com(n-1,m-1);
else
Print();
}
}
int main()
{
int i;
/* printf("%s", "Input N M = ");
scanf("%d%d", &N,&M);
*/
N = 5;
M=3;
if (N > MAXSIZE)
return 1;/*越界*/
for (i = 0; i < N; ++i)
A[i] = i+1;
Com(N-1,M-1);
system("pause");
return 0;
}

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧