#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; vector<int> line; vector<vector<int>> lines(n); for (int i = 0; i < n; i++) { int m; int x, y; cin >> m; line.clear(); line.push_back(m); while (cin >> x >> y) { line.push_back(x); line.push_back(y); if(cin.get()=='\n'){ break; } } lines[i] = line; } vector<vector<int>> num(64, vector<int>(64, 0)); for (auto line : lines) { int mm = line[0]; for (int i = 1; i < line.size(); i += 2) { int x = line[i]; int y = line[i + 1]; num[x][y] = mm; } } vector<int> an; vector<pair<int, int>> offsets = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; for (auto line : lines) { int mm = line[0]; int p = 0; for (int i = 1; i < line.size(); i += 2) { int x = line[i]; int y = line[i + 1]; for (auto offer : offsets) { int newx = x + offer.first; int newy = y + offer.second; if (newx >= 0 && newx < 64 && newy >= 0 && newy < 64) { if (num[newx][newy] != mm) p++; } else { p++; } } an.push_back(p); } } for (int i = 0; i < an.size(); i++) { cout << an[i] << " "; } cout << endl; return 0; }当n输入2时无法输出
时间: 2024-02-14 13:28:35 浏览: 93
在你提供的代码中,出现无法输出结果的问题是因为在读取输入时,对于每个line的结束,你使用了`if(cin.get()=='\n')`的判断条件来终止循环。然而,在输入时,可能会在每个line的最后一个y值后面跟着一个换行符,而不是两个整数值。因此,使用`cin.get()`来判断换行符并不是一个可靠的方式。
为了解决这个问题,你可以使用以下方法来读取输入:
```cpp
#include <iostream>
#include <vector>
int main() {
int n;
std::cin >> n;
std::vector<std::vector<int>> lines(n);
for (int i = 0; i < n; i++) {
int m;
std::cin >> m;
std::vector<int> line;
line.push_back(m);
int x, y;
while (std::cin >> x >> y) {
line.push_back(x);
line.push_back(y);
if (std::cin.peek() == '\n') {
std::cin.ignore();
break;
}
}
lines[i] = line;
}
// 以下代码保持不变
return 0;
}
```
在这个修改后的代码中,我们使用了`std::cin.peek()`来查看下一个字符是否是换行符。如果是,我们调用`std::cin.ignore()`来忽略换行符,并终止内层循环。
这样修改后,你应该能够正确输出结果了。如果还有其他问题,请随时告诉我。
阅读全文