按矩阵顺序打印字母

时间:2018-02-23 14:35:42

标签: c++

现在我有了这段代码

int main() {
int cols;
cout << "cols";
cin >> cols;
int rows;
cout << "rows";
cin >> rows;


char** charArray = new char*[rows];
for (int i = 0; i < rows; ++i) {
    charArray[i] = new char[cols];
}

// Fill the array
for (int i = 0; i < rows; ++i) {
    for (int j = 0; j < cols; ++j) {
        charArray[i][j] = char('1' + i + j );
    }
}

// Output the array
for (int i = 0; i < rows; ++i) {
    for (int j = i; j < cols ; ++j) {
        cout << charArray[i][j];
    }
    cout << endl;
}



// Deallocate memory by deleting
for (int i = 0; i < rows; ++i) {
    delete[] charArray[i];
}

,输出就像 1 2 3 2 3 4

我怎样才能做到 1 2 3 4 5 6

我尝试了很多,我是编程新手,所以请你解释一下这个问题是什么问题!非常感谢!!

3 个答案:

答案 0 :(得分:3)

只需改变一下:

charArray[i][j] = char('1' + i + j );

由:

 charArray[i][j] = char('1' + i*cols + j);

顺便说一句: 输出数组循环中有一个拼写错误:

for (int j = i; j < cols ; ++j) {

应该是:

for (int j = 0; j < cols ; ++j) {

答案 1 :(得分:1)

数组填充循环应该是

int count = 0;     
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
    charArray[i][j] = char('1' +count );
count++;
}
}

尝试上面的代码

答案 2 :(得分:0)

你正在构建一个矩阵,就在这里。所以它是二维的。 输出的含义是矩阵看起来像:

1 2 3
2 3 4

这是很自然的,因为在填充它时,你为坐标i,j的每个元素写了值1 + i + j。这意味着如果i和j都等于1(第二行,第二列,因为索引从0开始),你将值1 + 1 + 1 = 3。

如果你想获得矩阵:

1 2 3
4 5 6

你必须填写

charArray[i][j] = char('1' + i*ncols + j );

这样当你填充第一行时,i = 0,所以它是一样的。 但是在第二行,i = 1,所以得到1 + 3 + 0 = 4.然后1 + 3 + 1 = 5,等等。

编辑:人们在这里很快。当我写下我的答案时,已经有2个人发布了他们的答案:D