输入小,输出大?

时间:2018-01-17 15:46:37

标签: c++

我对我写的这段简短代码有疑问:

#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

int main() {
    ofstream fout("hps.out");
    ifstream fin("hps.in");
    int N;
    fin >> N;
    int a1, a2, b1, b2, c1, c2 = 0;
    for (int i = 0; i < N; i++) {
        int x, y;
        fin >> x;
        fin >> y;

        if (x == 1 && y == 2) {
            a1++;
        }
        if (x == 1 && y == 3) {
            a2++;
        }
        if (x == 2 && y == 1) {
            b1++;
        }
        if (x == 2 && y == 3) {
            b2++;
        }
        if (x == 3 && y == 1) {
            c1++;
        }
        if (x == 3 && y == 2) {
            c2++;
        }
    } 
    fout << a1 << " " << a2 << " " << b1 << " " << b2 << " " << c1 << " " << 
c2 << " " << '\n';
    return 0;
}

所以这是输入:

5
1 2
2 2
1 3
1 1
3 2

这是输出:

32768 4197767 0 616536480 0 1

我想要做的是计算(1,2),(1,3),(2,1),(2,3),(3,1)和(3,3)对的数量,并将这些值存储在变量a1,a2,b1,b2,c1,c2中。但由于某种原因,我得到了这些巨大的数字,我不明白为什么。有什么东西溢出来了吗?

这个问题的陈述实际上是USACO Bronze Janurary#2:

http://www.usaco.org/index.php?page=viewproblem2&cpid=688

我将不胜感激任何帮助!

1 个答案:

答案 0 :(得分:2)

问题出在这一行:

int a1, a2, b1, b2, c1, c2 = 0;

这只用零初始化c2。其余的持有垃圾值。 您需要为每个变量执行= 0