数字で建てられた壁があります。 0
は、穴があり、穴に穴ができないことを意味します。誰かが1発の数字ですべてのブロックを発射する特別な銃を持っています。
私は壁と呼ばれる行列を持ち、銃を書く必要があります。私はプログラムを書いたが、問題があり、なぜそれが起こっているのか分からない。ラインwall[ height - j - 1 ][ i ] = 0;
次の例では最初の4列のために働いていると、それは最後の1のために動作しませんなぜ私のコード壁が破壊される
#include <iostream>
#include <cstdio>
using namespace std;
int createWall(int &height, int &length, int wall[][ 100 ], int shots)
{
int i;
int j;
cin >> height;
cin >> length;
cin >> shots;
for (i = 0; i < height; i++)
{
for (j = 0; j < length; j++)
{
cin >> wall[ i ][ j ];
}
}
return shots;
}
void wallNow(int height, int length, int wall[][ 100 ])
{
int i;
int j;
for (i = 0; i < height; i++)
{
for (j = 0; j < length; j++)
{
cout << wall[ i ][ j ] << " ";
}
cout << "\n";
}
}
void destroyWall(int height, int length, int wall[][100], int shots)
{
int i;
int j;
int k;
int x;
int aimedBlocks;//number to be "destroyed"
//set all aimedBlocks to 0
for (x = 0; x < shots; x++)
{
cin >> aimedBlocks;
for (i = 0; i < height; i++)
{
for (k = 0; k < length; k++)
{
if (wall[ i ][ k ] == aimedBlocks)
{
wall[ i ][ k ] = 0;
}
}
}
}
int counter;//I use this variable because at some point I have a 0 followed only by 0's
for (i = 0; i < length; i++)
{
j = height - 1;
counter = 0;
//if I find a 0 then I move all elements higher that it one step down
while (counter < height)
{
if (wall[ j ][ i ] == 0)
{
for (k = j; k > 0; k--)
{
wall[ k ][ i ] = wall[ k - 1 ][ i ];
}
wall[ height - j - 1 ][ i ] = 0;
}
else
j--;//I don't always go up ene step because the "block" droped in place of 0 may be 0
counter++;
}
}
}
int main()
{
int height;
int length;
int wall[ 100 ][ 100 ];
int shots = 0;
shots = createWall(height, length, wall, shots);
destroyWall(height, length, wall, shots);
wallNow(height, length, wall);
}
で、私は本当に理解していません。
フォーマット入力:
height length shots
wall_0_0 ... wall_0_length
... ... ...
wall_height ... wall_height_length
shot_0 ... shot_shots
入力:
4 5 3
3 5 4 5 1
2 1 1 5 3
1 1 5 5 1
5 5 1 4 3
1 5 1
1
、5
、1
と一致するすべての値を削除します。壁の残骸は底に落ちなければならない。
出力:
0 0 0 0 0
0 0 0 0 0
3 0 0 0 0
2 0 4 4 3
が予想される:
0 0 0 0 0
0 0 0 0 0
3 0 0 0 3
2 0 4 4 3
私はこの問題を解決する助けてください。私はそれがコードをデバッグ見つけることができませんでした。
デバッガを使用する必要があるようです。 –
@JamesRoot私はデバッガを使用しました –