使用1d阵列打印2d阵列

时间:2014-09-18 17:19:15

标签: c++ c

我正在课堂上研究八个女王/国际象棋棋盘问题。对于我的代码,我使用的是一维数组,即q [c](c是列)来存储由一个皇后组成的行的值。例如,q [1] = 3表示在第2列(基于0的数组)中,第4行中有一个女王。

原始问题使用了2d数组,因此b [r] [c]要么= 0,要么1,1是女王,0是其余的。程序使用ok函数来测试它对所有先前放置的皇后所放置的每个皇后,最后打印结果。

The print function was
for(int j=0; j<c;j++)
   cout<<endl;
   for(int i=0; i<c;i++)
      cout<< b[i][j];

打印了92个看起来像这样的解决方案板

10000000
00001000
01000000
00010000
00000010
00100000
00000100
00000001

现在我的问题: 我不能为我的生活找出如何获得前面提到的1d阵列b [c]来打印看起来与此相同的板。我是初学者综合科学学生,但我仍然认为这将更加微不足道。

我不是在寻找答案,更多的是暗示我是朝着正确的方向前进,或者是第一行代码。帮助非常感谢。感谢

3 个答案:

答案 0 :(得分:0)

像......那样的东西。

for (int y = 0; y<8; y++) {
   int val = b[y];
   for (int x=0; x<8; x++) {
      x==val ? printf("1") : printf("0") ;
   }
   printf("\n");
}

    for (int y = 0; y<8; y++) {
       char[9] line;
       strcpy(line,"00000000");
       line[b[y]] = '1';
       printf("%s\n",line);
    }

答案 1 :(得分:0)

我想如果你的数组会告诉你每个是一个女王,你就可以轻松地找出解决方案。不幸的是,你必须逐行产生输出,因为文本终端就是这样的。它也不是那么难:

  • 每行:
    • 每列:
      • 如果(行,列)有女王:打印1,否则打印0

您已拥有此代码。除了“如果有女王......”部分。因此,让我们解决问题并使其成为一个功能:

bool is_there_a_queen(const int[8] board, int row, int col);

您能否实施is_there_a_queen

答案 2 :(得分:0)

#include <iostream>

/*
10000000
00001000
01000000
00010000
00000010
00100000
00000100
00000001
*/

int main()
{
   int q[] = {0, 4, 1, 3, 6, 2, 5, 7};
   for (int i = 0; i < 8; ++i )
   {
      for (int j = 0; j < 8; ++j )
      {
         if ( q[i] == j )
         {
            std::cout << 1;
         }
         else
         {
            std::cout << 0;
         }
      }
      std::cout << std::endl;
   }
   return 0;
}