是什么导致了这种奇怪的行为?

时间:2013-11-28 01:33:49

标签: c++

我试图解决这个简单的问题http://codeforces.com/problemset/problem/158/B 我想出了解决它的代码:

int main() {
int n,x,sum;
cin >> n;
for (int i = 0; i < n; i++) {
    cin >> x; sum += x;
}

for (int j = 1; j <= sum; j++) {
    double q = (sum*1.0) / j;
    if (q <= 4*1.0) {
        cout << j;
        break;
    }
}
return 0;

无论这个解决方案的正确性如何,我都注意到没有打印出来,但如果我改变了这条线

cout << j;

到此:

cout << ' ' << j;

它打印答案(当然在空格之后)。

我在ideone.com上测试了我的代码(这是我的解决方案http://ideone.com/wldwvy的实际链接),行为如上所述,但是当我在这个网站http://www.compileonline.com/compile_cpp0x_online.php上测试时,输出结果是罚款(不得包括空间)。

完全尴尬的是当我试图在一个非常小的测试用例上提交我的解决方案时,它给了我(超出时间限制判决)的代码。

为什么会这样?

2 个答案:

答案 0 :(得分:6)

您没有初始化sum,因此sum += x是未定义的行为。你的代码可以做任何事情;编译器不需要检测问题或做任何明智的事情。

答案 1 :(得分:0)

cout的缓冲区无法刷新可能是一个问题。如果你这样做也应该有用

cout << j << endl;

添加空间的原因是因为它增加了缓冲区的内容,因此更有可能触发自动刷新。