Es gibt eine Wand aus Zahlen gebaut. 0
bedeutet, dass es ein Loch gibt und Blöcke nicht auf Löchern sitzen können. Jemand hat eine Spezialwaffe, die alle Blöcke mit einer Nummer in einem Schuss abfeuert.
Also habe ich eine Matrix namens Wand und muss eine Pistole schreiben. Ich habe das Programm geschrieben, aber ich habe ein Problem und ich verstehe nicht, warum es passiert. In meinem CodeWand zerstören
#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);
}
Ich verstehe wirklich nicht, warum Linie wall[ height - j - 1 ][ i ] = 0;
wird für die ersten 4 Spalten im folgende Beispiel arbeiten und es für die letzten nicht funktioniert.
Format Eingang:
height length shots
wall_0_0 ... wall_0_length
... ... ...
wall_height ... wall_height_length
shot_0 ... shot_shots
Eingang:
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
Entfernen Sie alle Werte, die mit 1
übereinstimmt, 5
, 1
. Und Mauerreste müssen in den Boden fallen.
Ausgang:
0 0 0 0 0
0 0 0 0 0
3 0 0 0 0
2 0 4 4 3
Erwartet:
0 0 0 0 0
0 0 0 0 0
3 0 0 0 3
2 0 4 4 3
Bitte helfen Sie mir dieses Problem zu lösen. Ich konnte es nicht finden, den Code zu debuggen.
Es klingt wie Sie einen Debugger verwenden müssen. –
@JamesRoot Ich habe den Debugger –