0

VC2010 Express を使用していますが、よく理解できない結果に直面しています。私のコードは次のとおりです。

//

#include "stdafx.h"
#include <iostream>
#include <time.h>

using namespace std;

void main()
{
    const int gridSize = 2;
    int grid[gridSize][gridSize];

    for(int x=1; x <= gridSize; x++){
        for(int y=1; y <= gridSize; y++){
            grid[x][y] = 0;
        }

    }
    for(int i=0; i <= gridSize; i++){
        grid[i][0] = 1; // set the horizontal line to 1's
        grid[0][i] = 1; // set the vertical line to 1's
    }

    int rows = 0;
    while(rows <= gridSize){
        for(int i=0; i<=gridSize; i++){
            cout << grid[i][rows] << " ";
        }
        cout << "\n";
        rows++;
    }

    clock_t wait;
    wait = clock();
    while (clock() <= (wait + 500000));  // Wait for 500 seconds and then continue
    wait=0;
}

このコードが次の結果になることを期待しています。

  • 1 1 1
  • 1 0 0
  • 1 0 0

代わりに、次のようになります。

  • 1 1 1
  • 1 0 0
  • 1 1 0

このコードで grid[1][2] を 1 で埋める方法がわかりません。それについて何か考えはありますか?

編集: 今、自分の質問に答えることはできません..しかし、格子パスの問題を解決しました! :)グリッド内の格子パスの量を計算するために、このコードで終わりました:

#include "stdafx.h"
#include <iostream>
#include <time.h>

using namespace std;

void main()
{
    const int gridSize = 3;
    int grid[gridSize+1][gridSize+1];

    for(int i=0; i <= gridSize; i++){
        grid[i][0] = 1; // set the horizontal line to 1's
        grid[0][i] = 1; // set the vertical line to 1's
    }

    for(int x=1; x <= gridSize; x++){
        for(int y=1; y <= gridSize; y++){
            grid[x][y] = grid[x-1][y] + grid[x][y-1];
        }
    }

    cout << "Amount of lattice paths for a " << gridSize << "x" << gridSize << " grid: " << grid[gridSize][gridSize];

    clock_t wait;
    wait = clock();
    while (clock() <= (wait + 500000));  // Wait for 500 seconds and then continue
    wait=0;
}

早速のお返事ありがとうございます :)

4

1 に答える 1

4

配列インデックスが範囲外です。次に例を示します。

for(int x=1; x <= gridSize; x++){

次のようにする必要があります。

for(int x = 0; x < gridSize; x++){
                 ^ removed =

index value のループを実行する必要があります。[0 to gridSize)はい、この誤動作はC 標準では未定義の動作と呼ばれます。

于 2013-07-16T08:35:42.970 に答える