我正在制作一个模拟扫雷游戏的算法。您必须输入行数和列数,然后输入炸弹(由'*'表示)和空格,由任何char表示。
在输出中,您必须打印一个矩阵,其中显示有炸弹的'*',以及每个空白边框上的炸弹数量。此外,在显示结果矩阵之前,输出必须包含“Field #x”,其中“x”是输出的数字
在我的算法上,我得到了正确的结果 - 但是当我将它发送给在线评判时,它说答案是错误的,所以我认为这可能是格式化问题。我在哪里想念?练习的链接就在这里http://www.programming-challenges.com/pg.php?page=downloadproblem&probid=110102&format=html
#include <iostream>
using namespace std;
int main(int argc, const char * argv[])
{
int l;
int c;
int boleano = 0;
int cont = 1;
while (boleano == 0) {
cin >> l >> c;
if (c <= 0 || l <= 0 || l > 100 || c > 100) {
boleano = 1;
break;
}
char matriz[l][c];
char aux[c];
// ESCANEANDO MATRIZ
for (int i=0; i<l; i++) {
cin >> aux;
for (int j=0; j<c; j++){
matriz[i][j] = aux[j];
}
}
int contador[l+2][c+2];
// ZERANDO MATRIZ CONTADORA
for (int i=0; i<l+2; i++) {
for (int j=0; j<c+2; j++) {
contador[i][j] = 0;
}
}
// ACRESCENTANDO VALORES DAS BOMBAS
for (int i=1; i<l+1; i++) {
for (int j=1; j<c+1; j++) {
if (matriz[i-1][j-1] == '*') {
contador[i-1][j-1]++;
contador[i-1][j]++;
contador[i-1][j+1]++;
contador[i][j-1]++;
contador[i][j+1]++;
contador[i+1][j-1]++;
contador[i+1][j]++;
contador[i+1][j+1]++;
}
}
}
// PRINT FINAL
if (cont >1) {
cout << endl;
}
cout << "Field #" << cont << ":" << endl ;
for (int i=1; i<l+1; i++) {
for (int j=1; j<c+1; j++) {
if (matriz[i-1][j-1] == '*') {
cout << matriz[i-1][j-1];
}
else {
cout << contador[i][j];
}
}
cout << endl;
}
cont++;
}
return 0;
}
答案 0 :(得分:0)
你可以插入一个额外的布尔值来显示当前循环是否是第一个循环。
如果不是,并且当前行计数不等于0,则插入额外的新行。如果格式化问题是因为需要以下格式:
[没什么]
领域#1:
* 100
2210
1×10个
1110
[换行符]
领域#2:
** 100
33200个
1个* 100个
[没什么]
我使用[Nothing]来表示没有(更多)新行的位置。