数组的i和j值不正确
我已经尝试检查i和j可能改变但没有看到任何地方的任何地方。
for (int i = 0; i<N; i++) {
for (int j = 0; j<M; j++) {
cin >> grid[j, i];
}
}
for (int i = 0; i<N; i++) {
for (int j = 0; j<M; j++) {
cout << grid[j, i];
}
cout << "\n"
}
Run Code Online (Sandbox Code Playgroud)
我以n行和m列的表格形式提供了输入
2 1 1 1 -1 -1 -1 -1
2 1 1 1 -1 -1 -1 -1
-1 1 1 1 -1 -1 -1 -1
-1 1 1 1 -1 -1 -1 -1
-1 1 1 1 1 -1 -1 -1
-1 -1 1 1 1 1 -1 -1
-1 -1 1 1 1 1 1 -1
Run Code Online (Sandbox Code Playgroud)
但答案是
-1-1-1-1-1-1-1-1
-1-1-1-1-1-1-1-1
-1-1-1-1-1-1-1-1
-1-1-1-1-1-1-1-1
-1-1-1-1-1-1-1-1
-1-1-1-1-1-1-1-1
-1-1-1-1-1-1-1-1
-12
Run Code Online (Sandbox Code Playgroud)
grid[j, i]只会扔掉j-,所以您正在做grid[i],i仅使用1D数组寻址。
grid[i][j]是解决2D数组中元素的常用方法,如果您将其声明为,则可以使用int grid[N][M]。
如果您具有一维数组(int grid[N*M]),并使用它来存储2D数据,则
grid[j*N + i] 要么 grid[j + i*M]
看起来像您所需要的。
例:
#include <iomanip>
#include <iostream>
#include <sstream>
// simulated cin
std::istringstream cin(
"2 1 1 1 -1 -1 -1 -1\n"
"2 1 1 1 -1 -1 -1 -1\n"
"-1 1 1 1 -1 -1 -1 -1\n"
"-1 1 1 1 -1 -1 -1 -1\n"
"-1 1 1 1 1 -1 -1 -1\n"
"-1 -1 1 1 1 1 -1 -1\n"
"-1 -1 1 1 1 1 1 -1\n");
int main() {
constexpr int N = 7;
constexpr int M = 8;
int grid[N * M];
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
cin >> grid[j + i * M];
}
}
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
std::cout << std::setw(2) << grid[j + i * M];
}
std::cout << "\n";
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
2 1 1 1-1-1-1-1
2 1 1 1-1-1-1-1
-1 1 1 1-1-1-1-1
-1 1 1 1-1-1-1-1
-1 1 1 1 1-1-1-1
-1-1 1 1 1 1-1-1
-1-1 1 1 1 1 1-1
Run Code Online (Sandbox Code Playgroud)