【问题标题】:Creating a 2D array board创建二维阵列板
【发布时间】:2014-04-19 18:22:34
【问题描述】:

我正在尝试创建一个由用户输入确定的二维矩阵板。我创建了两个 D 数组,但它没有打印正确的数字。例如,如果用户输入 3,则假设创建一个 3 * 3 的棋盘,数字为 8、7、6、5、4、3、2、1、0。

但是,它会在每一行中打印相同的数字,例如 876、876、876

我知道它正在执行我所写的操作,但我不知道如何纠正它...我在想我需要一个重置为零的计数器,也许是 [i][j] = 计数器的值。

无论如何,这里是给麻烦的代码。

for (i =0; i< row; i++) 
{  
    for (j =0; j < col; j++)
    {
        game [i][j] = ((row * row)-1) - j;   
        printf( "%i", game[i][j] ); 
    }

如何填充板子,使其从 (row * col) - 1 打印到零。谢谢一百万。

【问题讨论】:

  • 提示,使用另一个变量并在每个循环中减 1。

标签: c arrays 2d


【解决方案1】:
for ((i=0, k=0); i< row; i++) 
{  
    for (j =0; j < col; j++)
    {
        game [i][j] = ((row * col)-1) - (k++);   
        printf( "%i", game[i][j] ); 
    }
}

代码中的基本错误是,在每次迭代中,从 game[i][j] 中减去的值重新初始化为 0。因为 (row * col) 的值对于 a给定两者的值,每次从总和中减去 (0, 1, 2) 会导致相同数字的再现。

如示例中所示,row=3,col=3,因此 3*3 = 9(索引从 0 到 8)。

所以,我们这样做:

8 - 0 = 8
8 - 1 = 7
8 - 2 = 6

再次将 j 重新初始化为 0,所以我们又得到了,

8 - 0 = 8
8 - 1 = 7
8 - 2 = 6

.

解决方案是,被减去的值应该统一减少,这样它就不会在循环内重新初始化。

结果:

8 - 0 = 8
8 - 1 = 7
8 - 2 = 6
8 - 3 = 5
.
.
.
.
8 - 8 = 0.

希望这能解决问题。

【讨论】:

  • 您的答案在低质量帖子审核队列中,并且有可能被删除。请添加一些关于 OP 做错了什么以及您的代码如何解决该问题的解释。
【解决方案2】:

正如“self”所建议的,使用第三个变量是最简单的方法(实际上也是最有效的:每次迭代只递减一次)

int count = row * col - 1;

for (size_t i =0; i< row; i++)
{
    for (size_t j =0; j < col; j++)
    {
        game [i][j] =  count--;
        printf( "%i", game[i][j] );
    }
}

输出: 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

【讨论】:

    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 2021-10-04
    • 1970-01-01
    • 2021-05-12
    相关资源
    最近更新 更多