编写计算组合数的程序。要求输入数据要有容错功能。
**输入格式要求:"%d,%d" 提示信息:"Input m,k (m>=k>0):"
**输出格式要求:"p = %.0f\n"
程序运行示例1如下:
Input m,k (m>=k>0):3,2
p = 3
程序运行示例2如下:
Input m,k (m>=k>0):2,3
Input m,k (m>=k>0):3,3
p = 1
Input m,k (m>=k>0):-2,-4
Input m,k (m>=k>0):4,2
p = 6
这是问题,下面是我编的程序:
#include<stdio.h>
#include<math.h>
double Combination(int a,int b);
long Fact(int n);
int main()
{
printf("Input m,k (m>=k>0):");
int m,k,ret;
scanf("%d,%d",&m,&k);
ret=Combination(m,k);
printf("p = %.0f\n",ret);
}
double Combination(int a,int b)
{
double result;
a=fabs(a);
b=fabs(b);
if(a>=b&&b>0)
{
result=Fact(a)/(Fact(b)*Fact(a-b));
return result;
}
else
{
result=Fact(b)/(Fact(a)*Fact(b-a));
return result;
}
}
long Fact(int n)
{
int i;
long result=1;
for(i=2;i<=n;i++)
{
result*=i;
}
return result;
}
刚开始接触函数这部分,Combination为计算组合数的函数,其中还用到了Fact函数用来求阶乘,请问可以这么写吗?问题到底出在哪里呢?
烦请各位指点,不胜感激!
结果好像是对的。你为什么要用浮点数呢?
我想了想,中间还是有点缺陷,没有考虑a或者b其中有一个为0的情况,后面补上了。
不过输出一直是0,问题是不是出在用一个函数调用另一个函数上呢?
#include<stdio.h>
double conbination(int m, int k);
int jc(int n);
int main()
{
int m, k;
do
{
printf("Input m,k (m>=k>0):");
scanf(" %d, %d", &m, &k);
}
while (m < k || m <= 0 || k <= 0);
printf("p = %.0f\n", conbination(m, k));
}
double conbination(int m, int k)
{
return jc(m) / (jc(k) * jc(m - k));
}
int jc(int n)
{
int result;
if (n == 1)
{
result = n;
return result;
}
else
{
result = n * jc(n - 1);
}
return result;
}
#include<stdio.h>
double conbination(int m, int k);
int jc(int n);
int main()
{
int m, k;
do
{
printf("Input m,k (m>=k>0):");
scanf(" %d, %d", &m, &k);
}
while (m < k || m <= 0 || k <= 0);
printf("p = %.0f\n", conbination(m, k));
}
double conbination(int m, int k)
{
return jc(m) / (jc(k) * jc(m - k));
}
int jc(int n)
{
int result;
if (n == 1)
{
result = n;
return result;
}
else
{
result = n * jc(n - 1);
}
return result;
}