/*
*
*Program for finding total number of holes in a string.
*For example total number of holes in "ANUBHAV" is 4 and in "GOURAV" is 3
*
*/
#include <stdio.h>
#include<string.h>
// start of main function
int main(void) {
int t,i = 0,hole = 0; // variable declaration
` char str[100];
scanf("%d",&t); // input number of test cases
while(t--)
{
scanf("%s",str); // input string
while(i < strlen(str))
{
if(str[i] == 'B')
{
hole += 2;
}
else if(str[i] == 'A' || str[i] == 'D' || str[i] == 'O' || str[i] == 'P' || str[i] == 'Q' || str[i] == 'R' )
{
hole += 1;
}
i = i + 1;
}
printf("%d",hole); //printing the total number of holes
}
return 0;
}
此代码在第一个测试用例(t)中正确输出,但为下一个测试用例产生错误的输出。代码中有什么问题? 请帮忙! 在此先感谢!
答案 0 :(得分:1)
每次输入新字符串时都需要初始化hole
。您的代码也可以进行很多改进,请查看
/*
*
*Program for finding total number of holes in a string.
*For example total number of holes in "ANUBHAV" is 4 and in "GOURAV" is 3
*
*/
#include <stdio.h>
#include <string.h>
// start of main function
int main(void)
{
int hole; // variable declaration
int count;
char str[100];
if (scanf("%d", &count) != 1)
return -1; // Input Error
for (int i = 0 ; i < count ; ++i)
{
hole = 0;
if (scanf("%99s", str) != 1)
return -1; // Input Error
for (int j = 0 ; str[j] != '\0' ; ++j)
{
switch (str[j])
{
case 'B':
hole += 2;
break;
case 'A':
case 'D':
case 'O':
case 'P':
case 'Q':
case 'R':
hole += 1;
break;
}
}
printf("Holes in %s -> %d\n", str, hole); //printing the total number of holes
}
return 0;
}
答案 1 :(得分:1)
<强>解决方案: - 强>
在您的代码中,您应该在循环内初始化hole
,
while (t--) {
int hole = 0;
.
.
}
<强>解释: - 强>
hole
的计数对于每个测试用例都是独特的。如果在每个测试用例的0
未初始化,则显示的计数将累计先前的计数,从而导致错误的结果。
例如,如果 test_case_0 有2个洞,则孔设置为2
,如果 test_case_1 有3
个洞,则孔为未重置为0
,最终结果将为 test_case_1 设置为5
,这会导致错误。
希望有所帮助。
答案 2 :(得分:0)
你应该在while语句和printf函数之后创建hole = 0的值。因为你的洞值不会因下一个测试用例而改变。