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,怎么改,如果可以的话能不调用函数解决吗 展开
#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,怎么改,如果可以的话能不调用函数解决吗 展开
2个回答
展开全部
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。
满意请采纳。
来自:求助得到的回答
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询