C++ 即使循环中断(在命令行中),也会读取输入序列
我如何处理这个问题C++ 即使循环中断(在命令行中),也会读取输入序列,c++,C++,我如何处理这个问题 while(ntestcase--) { int i, n, max; cin >> n; for(i = 0; i < n; i++) { cin >> a; if(a >= 2) max += 2; else break; } cout << "max=" << m
while(ntestcase--)
{
int i, n, max;
cin >> n;
for(i = 0; i < n; i++)
{
cin >> a;
if(a >= 2)
max += 2;
else
break;
}
cout << "max=" << max << " n=" << n << " i=" << i << "\n";
if(i == n && max != 0)
cout << max << "\n";
else
cout << -1;
}
我对这个问题的基本推断是,
这里输入5个a,但当遇到1时,循环中断并给出输出。
之后,对于下一个测试用例,来自相同输入的2被视为“n”
a等于3,4,输出是给定的,然后n等于5
产生的输出有点像这样:
max=0 n=5 i=0
-1
max=4 n=2 i=2
4
如何解决这个问题,考虑序列(示例:<代码> 1 2 3 3 5 < /代码>)作为一个单一的输入? 看起来你对错误的分析是正确的。 当您跳出循环时,未读输入将用于
while(ntestcase--)
的当前迭代是剩余的,并且
用作下一次迭代的输入
如果我是,我可能会以非常不同的方式编写所有这些代码
编写自己的程序(一方面,我会避免使用相同的变量I
来计算从输入中读取a
的次数,以及在第一个值小于2之前读取的次数),但要继续使用您已经选择的样式:
在while(ntestcase--)的主体末尾添加另一个for
循环
在不做任何其他事情的情况下使用该迭代的其余输入。
使用输入的n-i
值,
然后您将准备好下一次迭代while(ntestcase--)
例如,这可能会完成以下工作:
int how_many_to_discard = n - i;
for (int j = 0; j < how_many_to_discard; ++j)
{
cin >> a;
}
int要丢弃的数量=n-i;
for(int j=0;j<要丢弃的数量;++j)
{
cin>>a;
}
或者,如果您不想向任何想要调试代码的人透露太多线索,那么可以使用循环
for ( ; i < n; ++i)
(;i
对不起,我听不懂你在说什么。这是黑客银行的问题吗?链接?当您将值5赋给n
时,您希望程序读取5个数字。当您更快地中断read+compute循环时,程序读取的值会更少。因此,您必须读取并丢弃剩余的数字。
for ( ; i < n; ++i)