我在codechef上解决了一个问题: https://www.codechef.com/NITWMA01/problems/QPALIN。从用户获取m的值后,需要输入m个输入案例。我总是习惯于循环: 而(M--) {//输入测试用例},但在这个问题中我不知道为什么循环运行少于m次,当我必须得到输入情况m次。我尝试使用示例输入运行代码(m为6)但main()在获得4个输入后返回0(并且printint各自的输出在必要时)。 我的代码如下:
#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
int main()
{
int n,m,op,x,l,r,i,j,xorpair=0;
char k,s[100000];
scanf("%d",&n);
scanf("%s",s);
scanf("%d",&m);
for(j=0;j<m;j++)
{
scanf("%d",&op);
if(op==1)
{
scanf("%d",&x);
scanf("%c",&k);
s[x-1]=k;
}
else
{
xorpair=0;
scanf("%d%d",&l,&r);
for(i=l-1;i<r;i++)
{
xorpair^=s[i]-'0';
}
if(xorpair==0)
{
printf("YES\n");
}
else printf("NO\n");
}
}
return 0;
}
PS:我用scanf取代了cin。另外我相信我无法正确传达我面临的问题。所以这里的测试用例更清楚地解释了它:
(应该是什么样的)
样本输入:
7
abbacca
6
2 1 4
1 1 z
2 1 4
1 4 z
2 1 4
2 5 7
样品输出:
YES
NO
YES
是的
以下是我面临的问题: 当我为上述输入运行程序时,这就是输出屏幕上显示的内容
7
abbacca
6
2 1 4
YES
1 1 z
2 1 4
NO
1 4 z
进程返回0(0x0)
我无法输入6次输入,第4次输入后返回0。
答案 0 :(得分:0)
scanf("%c"
没有达到你所期望的效果。它只读取您想要的字符之前的' '
。然后下一次尝试阅读op
并且x
失败,op
仍然等于1,所以你每执行一次就会执行两次操作。