我写了一段代码,用于找到等于所提供参数之一的连续和。
#include <stdio.h>
#include <string.h>
int main()
{
//number of test case
int n;
int monfri[2];
scanf("%d",&n);
char res[n][3] ;
char yestok[3] = {"YES"};
int sum = 0;
int h = 0;
for(int i = 0 ; i < n; i++)
{
h=0;
//read no of friends and money
while (h < 2 && scanf("%d", &monfri[h]) == 1)
h++;
int fri[monfri[0]];
for(int j = 0; j < monfri[0]; j++)
scanf("%d",&fri[j]);
for(int k = 0; k < monfri[0] ; k++)
{
sum = 0;
for(int l=k+1; l<monfri[0]; l++)
{
sum = sum + fri[l - 1];
if(sum == monfri[1])
{
strcpy (res[i],yestok);
continue;
}
if(sum > monfri[i])
continue;
}
}
if(strcmp(res[i],yestok) != 0)
{
strcpy (res[i],"NO");
}
}
for(int d = 0; d < n ; d++)
{
puts(res[d]);
}
return 0;
}
提供相同的输入
2
5 12
2
3
4
5
6
3 15
2
2
2
这里的第一个输入代表我们案例中的测试用例2的
下一个输入表示实际的数据和总和值。在这里
5 12
3 15
预期输出应为
YES
NO
但我得到了
YESNO
NO
我做错了什么。如果没有测试用例是1那么它工作正常。但在2个或更多测试用例中失败。
答案 0 :(得分:3)
字符串&#34;是&#34;需要4个字符的空间。因此,您必须将yestok
的声明更改为
char yestok[4] = {"YES"};
甚至更好,让编译器确定长度:
char yestok[] = {"YES"};
否则,终止NUL字符会丢失,程序会调用未定义的行为。例如,strcmp
调用可能会失败。