#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); } 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> > offers={{-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:offers){ 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[i]=p; } } for(int i=0;i<an.size();i++){ cout<<an[i]; } return 0; } 这段代码为什么无法输出
时间: 2024-04-14 19:25:36 浏览: 129
在你提供的代码中,有几个问题导致无法输出结果:
1. 在第二个循环中,你使用的是`i+2`来更新`x`和`y`的索引。但是,这只是计算了新的索引值,并没有实际更新`x`和`y`的值。所以,你需要将`i+2`替换为`i+=2`,以正确更新索引。
2. 在第三个循环中,你创建了一个空的向量`an`,但是没有为它分配任何空间。你需要在循环之前初始化一个空的向量,并使用`push_back`方法将结果添加到向量中。
3. 在最后的输出循环中,你没有添加空格或换行符来分隔每个输出结果。你可以在输出之后添加一个空格或换行符,以使输出结果更清晰。
修复以上问题后,代码应该可以正确输出结果。以下是修改后的代码:
```cpp
#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);
}
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;
}
```
现在,代码应该可以正确输出结果。如果仍然有问题,请告诉我具体的错误信息,我将尽力帮助你解决。
阅读全文