0

プログラムは、すべての外側の線が 0 を出力し、内側の線が 1 を出力する 12x24 のグリッドを出力することになっています。

これは、最初の列と行を0に出力するために試したものです:

#include <iostream>

using namespace std;
#define N 24
// print:
//
// Prints the simulation matrix M as spaces, *'s, and T's.
//
void print(int M[][N], int ROWS, int COLS)
{
// YOU MUST IMPLEMENT THIS:
}
//
// fill:
//
// Fills the simulation matrix such that the boundary rows
// and columns are empty, the internal area is all trees,
// and one tree is burning at index position (row, col).
//
void fill(int M[][N], int ROWS, int COLS, int row, int col)
{
// YOU MUST IMPLEMENT THIS:

//
// main:
}//
int main()
{
int M[N/2][N];
int ROWS, COLS;
int r, c;
ROWS = sizeof(M) / sizeof(M[0]);
COLS = sizeof(M[0]) / sizeof(M[0][0]);
fill(M, ROWS, COLS, 1, 1);
for(r=0; r< ROWS; r++)
{
for(c=0; c< COLS; c++)
{
    if(ROWS>1)
    {
    M[ROWS][COLS]=1;
    cout<< M[ROWS][COLS];
    }
    else
    {

    M[ROWS][COLS]=0;
    cout<< M[ROWS][COLS];
}
}
cout<< endl;
}

print(M, ROWS, COLS);
return 0; 
}

これはどのように行うことができますか?

4

1 に答える 1

1

まず、「ボックスを作成するにはどうすればよいですか」と自問してください。ボックスを作成するには、4つの側面が必要です。ただし作成できる最も単純なボックスは2本の線で構成されます。これは、ボックスの高さをゼロまたは微小にすることができるためです。コードでは、ボックスを作成するために少なくとも2行が必要です。

そのようです:

000000000000000
000000000000000

ただし、高さはありません。つまり、これは高さゼロの境界ボックスです。

したがって、次のようなボックスを作成するには:

000000000000000
011111111111110
000000000000000

何に気づいた?最初と最後の行はすべてゼロです。そして、中央の行の最初と最後の要素はゼロであり、その行の他のすべては1です。

さらに拡張する:

000000000000000
011111111111110
011111111111110
000000000000000

同じパターンが表示されるため、これをn行目の場合に拡張できます。したがって、アルゴリズムは次のとおりです。

  1. 最初と最後の行はすべてゼロです。
  2. 他のすべての行の場合、それらの行の最初と最後の列はすべて0です。
  3. それ以外はすべて1に設定されます。

したがって、あなたの場合:

for(r=0; r< ROWS; r++)
{
    for(c=0; c < COLS; c++)
    {
        if (r == 0 || r == ROWS - 1) {
            M[r][c]=0;
        }
        else if(c == 0 || c == COLS -1) {
            M[r][c]=0;
        }
        else {
            M[r][c]=1;  
        }
        cout<< M[r][c];
    }
    cout << endl;
}
于 2013-03-18T05:09:15.397 に答える