【问题标题】:Print sudoku box numbers打印数独盒编号
【发布时间】:2020-12-21 01:41:38
【问题描述】:

我写了一个函数来显示每个数独框。但是我无法准确找到每个盒子的数量。 代码如下:

void Print_Box(void)
{
  size_t i = 0U, j = 0U, k = 0U, m = 0U;
  size_t col = 0 , row = 0, G_SIZE = 9, BOX_SIZE = 3;

  for (; i < G_SIZE; i+=3)
  {
    row = (i/3)*3;
    printf("Box number %zd\n",row+1);
    for (j = 0; j < G_SIZE; j+=3)
    {
      col = (j/3)*3;
      for (k = 0; k < BOX_SIZE; k++)
      {
        for (m = 0; m < BOX_SIZE; m++)
        {
          printf("[%d] ",Grid[row+k][col+m]);
        }
        putchar('\t');
      }
      puts("");
    }
    puts("");
  }
  return;
}

还有网格:

int Grid[9][9]  =
{
  {1,0,5,0,2,0,0,0,2},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,2,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,8,0,0,0,0,0,0,0},
  {0,0,8,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0}
};

这是输出:

Box number 1
[1] [0] [5]     [0] [0] [0]     [0] [0] [0]     
[0] [2] [0]     [0] [0] [0]     [0] [0] [0]     
[0] [0] [2]     [0] [0] [0]     [2] [0] [0]     

Box number 4
[0] [0] [0]     [0] [8] [0]     [0] [0] [8]     
[0] [0] [0]     [0] [0] [0]     [0] [0] [0]     
[0] [0] [0]     [0] [0] [0]     [0] [0] [0]     

Box number 7
[0] [0] [0]     [0] [0] [0]     [0] [0] [0]     
[0] [0] [0]     [0] [0] [0]     [0] [0] [0]     
[0] [0] [0]     [0] [0] [0]     [0] [0] [0]     

在打印盒子之前显示每个盒子的编号的目标,但我想不出办法。有什么提示吗?

【问题讨论】:

  • 你就不能像printf("Box number %zd Box number %zd Box number %zd\n", row+1, row+2, row+3);那样做吗?
  • 可以使用 (row,col) Take paper and pencil 计算盒子编号。 (提示:让它成为一个函数)

标签: c sudoku


【解决方案1】:

随便放

for (j = 0; j < G_SIZE; j+=3)

到里面

for (k = 0; k < BOX_SIZE; k++)

喜欢这个

int main()
{
        size_t i = 0U, j = 0U, k = 0U, m = 0U;
        size_t col = 0, row = 0, G_SIZE = 9, BOX_SIZE = 3;

        for (; i < G_SIZE; i += 3)
        {
            row = i;
            printf("Box number %zd\n", row + 1);
                for (k = 0; k < BOX_SIZE; k++)
                {
                    for (j = 0; j < G_SIZE; j += 3)
                    {
                        col = j;
                    for (m = 0; m < BOX_SIZE; m++)
                    {
                        printf("[%d] ", Grid[row + k][col + m]);
                    }
                    putchar('\t');
                }
                puts("");
            }
            puts("");
        }
        return 0;
}
  1. 你需要在 count 'row(k)' 中计算 (+=3) 'col(j)'

  2. 由于 i 和 j 加上 '3',所以不需要 row = (i/3) * 3;,只需 row = i;没关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    相关资源
    最近更新 更多