ACM的一道C语言问题

题目:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2627#include<... 题目:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2627
#include<stdio.h>
int t[31][31]={0};
int C(int m, int n)
{
if(m==n||0==n)
return t[m][n]=1;
if(t[m][n])
return t[m][n];
return t[m][n]=C(m-1,n-1)+C(m-1,n);
}
int main()
{
int a,b,g,k;
scanf("%d",&k);
while(k--)
{
scanf("%d%d",&a,&b);
if(a>b)
{
g=a;
a=b;
b=g;
}
if(a>(b/2))
a=b-a;
printf("%d\n",C(b,a));
}
return 0;
}
看一下,上交WA,怎么改,如果可以的话能不调用函数解决吗
展开
 我来答
yy_神_xx
2013-11-23 · TA获得超过680个赞
知道小有建树答主
回答量:599
采纳率:0%
帮助的人:388万
展开全部
有概率公式的。
解:Cn\m
=n!/(m!*(n-m)!)

!是阶乘,三个阶乘,建议写一个阶乘函数,很容易。
军天下wolfer
2013-11-23 · TA获得超过2081个赞
知道小有建树答主
回答量:734
采纳率:100%
帮助的人:941万
展开全部
AC代码一:
#include<stdio.h>
 #include<string.h>
 #include<ctype.h>
 #include<math.h>
 
 int comb(int n, int m)
 {
     int i,s=1;
     if(m==0) return 1;
     else return n*(comb(n-1,m-1))/m;
 }
 
 void solve()
 {
     int n,m,T,i;
     scanf("%d",&T);
     while(T--){
         scanf("%d %d",&n,&m);
         if(m==0) printf("1\n");
         else{
             printf("%d\n",comb(n-1,m)+comb(n-1,m-1));
         }
     }
 }
 
 int main()
 {
     solve();
     return 0;
 }


AC代码二:
#include<stdio.h>

#define M 32

int main(void)
{
    int num[M][M], i , j;
for(i=0;i<M;i++) 

num[i][0]=1; 
num[i][i]=1;

for(i=2;i<M;i++) 
for(j=1;j<i;j++) 
num[i][j]=num[i-1][j-1]+num[i-1][j]; 
int a,b,g,k;
    scanf("%d",&k);
    while(k--)
    {
        scanf("%d%d",&a,&b);
if(a<b)
printf("0\n");
else
        printf("%d\n",num[a][b]);
    }
return 0;
}

这个是AC的代码哈,你参考下。要考虑a<b的情况,这种情况输出0。

满意请采纳。

来自:求助得到的回答
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式