【发布时间】:2014-07-08 15:29:59
【问题描述】:
我对hackerearth上http://www.hackerearth.com/problem/golf/minimal-combinatorial/description/问题的解决方案:
#include <stdio.h>
signed long long int fn(int,int);
int main()
{
int t=0,n=0,r=0,i=1;
signed long long int c=0;
scanf("%d",& t);
for(i=1;i<=t;i++)
{
scanf("%d",&n);
scanf("%d",&r);
c=fn(n,r);
printf("%lld\n",c);
}
}
signed long long int fn(int n,int r)
{
if (r==1)
return n;
else if (r==0)
return 1;
else return (fn(n-1,r)+fn(n-1,r-1));
}
【问题讨论】:
-
不,它没有,它读取正确的整数(scanf 使用“%d”作为格式说明符)
-
为什么将
r和n声明为数组,但只使用它们的索引0? -
如果您使用
scanf而不是错误检查,如何确保正确的界限? -
@Fiddling 抱歉找不到你(我的意思是数组边界,现在我已经删除了数组)
-
@user3632784 抱歉。您(曾经)依赖用户输入数组中的元素数量并使用这个未经过滤的数字。这可能会导致访问数组边界之外的内存。
标签: c combinations