求指导!用C语言从N个数中任意取出M个的组合的个数,只求个数!!!

2024-12-22 17:26:32
推荐回答(4个)
回答1:

#include
void main()
{
int i,j,m,n,a,b,c,t;;
scanf("%d,%d",&n,&m); //“n=%d,m=%d”错误,另外注意一下,%d%d是以逗号隔开的,输入时也应以逗号隔开
j=1; //j=1放在for循环里了,每次循环都会把j重置为1,这里应该放在循环体外初始化。
for(i=1;i<=n;i++)
{
j=j*i;
if (i==m)
a=j;
if(i==n-m) //n-m可能会和m相等
b=j;
else
t=j;
}
c=t/(a*b);
printf("从%d中选%d个数的方法有%d个\n",n,m,c);
}

修改共三处,已经运行过了。
望采纳

回答2:

#include
void main()
{
long i,j=1,m,n,a,b,c,t; //首先j在最开始赋初值,如果在for中,那每次循环都会赋值为1,这里错了
scanf("m=%d,n=%d",&m,&n);
for(i=1;i<=n;i++)
{
j=j*i;
if (i==m)
a=j;
if(i==n-m) //因为n-m可能与m相等,所以不能用else
b=j;
else t=j;
}
c=t/(a*b);
printf("从n中选m个数的方法有%d个\n",c);
}
这个算法是没错,但是容纳的数据太大就会爆掉,可以用大数乘法,但是这样就会很麻烦了

回答3:

正在学习中,,

#include 
#define N 3
#define M 2
int f(int n,int m)
{
printf("n=%d,m=%d\n",n,m);
printf("\tf:%d\n");
if(n if(n==m) return 1;
if(m==0) return 1;
return f(n-1,m-1) + f(n-1,m);//假设取了第一个数,然后就有2种取法
}
int main(int argc, char *argv[])
{
int k=f(N,M);
printf("%d\n",k);
return 0;
}

回答4:

弱弱的说一句 楼主的错误挺多的 long型 要用%ld 输入输出 而且a,b,t你都没进行初始化就用了。
#include
int main()
{
int n,m,i,j;
int fem=1,fez=1;
long sum;
printf("输入两个数:\n");
scanf("%d%d",&n,&m);
j=m;
for(;m>0;m--)
fem*=m;
for(i=0;i fez*=n;
printf("有%ld中取法\n",sum=fez/fem);
return 0;
}