求指导!用C语言从N个数中任意取出M个的组合的个数,只求个数!!!
我用的是数学中组合的阶乘相除的公式,输出结果总是不对,求指导,不知道错在哪里了,如果有更好的方法希望可以借鉴,跪谢!!!#include<stdio.h>voidmain...
我用的是数学中组合的阶乘相除的公式,输出结果总是不对,求指导,不知道错在哪里了,如果有更好的方法希望可以借鉴,跪谢!!!
#include<stdio.h>
void main()
{
long i,j,m,n,a,b,c,t;
scanf("m=%d,n=%d",&m,&n);
for(i=1;i<=n;i++)
{
j=1;
j=j*i;
if (i==m)
a=j;
else if(i==n-m)
b=j;
else t=j;
}
c=t/(a*b);
printf("从n中选m个数的方法有%d个\n",c);
}
输出结果总是不对,求指导,不知道错在哪里了,如果有更好的方法希望可以借鉴,跪谢!!! 展开
#include<stdio.h>
void main()
{
long i,j,m,n,a,b,c,t;
scanf("m=%d,n=%d",&m,&n);
for(i=1;i<=n;i++)
{
j=1;
j=j*i;
if (i==m)
a=j;
else if(i==n-m)
b=j;
else t=j;
}
c=t/(a*b);
printf("从n中选m个数的方法有%d个\n",c);
}
输出结果总是不对,求指导,不知道错在哪里了,如果有更好的方法希望可以借鉴,跪谢!!! 展开
4个回答
展开全部
#include<stdio.h>
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);
}
修改共三处,已经运行过了。
望采纳
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);
}
修改共三处,已经运行过了。
望采纳
展开全部
#include<stdio.h>
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);
}
这个算法是没错,但是容纳的数据太大就会爆掉,可以用大数乘法,但是这样就会很麻烦了
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);
}
这个算法是没错,但是容纳的数据太大就会爆掉,可以用大数乘法,但是这样就会很麻烦了
更多追问追答
追问
按您说的改了一下 还是不对 能帮忙看下我的程序为什么不对啊
追答
我试了,没错啊,你把改过的代码发过来给我看看,应该是对的,但是这种方法只能测试比较小的数据,大了就会爆掉
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
正在学习中,,
#include <stdio.h>
#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<m) return 0;//出口条件,即结束递归
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
弱弱的说一句 楼主的错误挺多的 long型 要用%ld 输入输出 而且a,b,t你都没进行初始化就用了。
#include<stdio.h>
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<j;i++,n--)
fez*=n;
printf("有%ld中取法\n",sum=fez/fem);
return 0;
}
#include<stdio.h>
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<j;i++,n--)
fez*=n;
printf("有%ld中取法\n",sum=fez/fem);
return 0;
}
追问
我初学者,不太懂,按您说的改了一下 还是不对 能帮忙看下我的程序为什么不对啊
追答
把你的测试点 说一下 就是要输入的数据
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询