طلیعه-988
پنج شنبه 28 مرداد 1389, 13:15 عصر
سلام.دوستان اگه ممکنه واسه سوال زیر کمکم کنید:
من کد مربوط به بازی Minesweeper رو نوشتم و تو سایت UVa online judge فرستادم و هی پیغام Wrong answer میده!!!هر کاری به ذهنم میومد کردم که دیگه به جایی قد نداد.
لطفا Help!!!
PC/UVa IDs:
110102/10189, Popularity: A, Success rate: high Level: 1
Have you ever played Minesweeper? This cute little game comes with a certain operating
system whose name we can’t remember. The goal of the game is to find where
all the mines are located within a
M × N field.
The game shows a number in a square which tells you how many mines there are
adjacent to that square. Each square has at most eight adjacent squares. The 4
×4 field
on the left contains two mines, each represented by a “
*” character. If we represent the
same field by the hint numbers described above, we end up with the field on the right:
*...
....
.*..
....
*100
2210
1*10
1110
Input
The input will consist of an arbitrary number of fields. The first line of each field
contains two integers
n and m (0 < n,m ≤ 100) which stand for the number of lines
and columns of the field, respectively. Each of the next
n lines contains exactly m
characters, representing the field.
Safe squares are denoted by “
.” and mine squares by “*,” both without the quotes.
The first field line where
n = m = 0 represents the end of input and should not be
processed.
Output
For each field, print the message
Field #x: on a line alone, where x stands for the
number of the field starting from 1. The next
n lines should contain the field with the
“
.” characters replaced by the number of mines adjacent to that square. There must
be an empty line between field outputs.
Sample Input
4 4
*...
....
.*..
....
3 5
**...
.....
.*...
0 0
Sample Output
Field #1:
*100
2210
1*10
1110
Field #2:
**100
33200
1*100
#include<iostream>
#include<string>
using namespace std;
char field[110][110];
int FindNo(char[][110],int,int );
void Print(char [][110]);
int n,m;
int cnt=0;
int main()
{
int q=0;
while(cin>>n>>m && n!=0 && m!=0)
{
q++;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
field[i][j]=' ';
}
}
for(int i=0;i<n;i++) { cin>>field[i];}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(field[i][j]=='*')
continue;
else
{
cnt=FindNo(field,i,j);
field[i][j]=cnt;
cnt=0;
}
}
}
cout<<endl<<"Field #"<<q<<":"<<endl;
Print(field);
cout<<endl;
}
return 0;
}
int FindNo(char a[][110],int i,int j)
{
int J;
J=j;
for(int k=i-1;k<=i+1;k++)
{
for(int z=j-1;z<=j+1;z++)
{
if(field[k][z]=='*')
cnt++;
}
j=J;
}
return cnt;
}
void Print(char a[][110])
{
int ch;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
ch=(int)a[i][j];
if(ch==42)
{cout<<'*';}
else
{cout<<ch;}
ch=0;
}
cout<<endl;
}
}
من کد مربوط به بازی Minesweeper رو نوشتم و تو سایت UVa online judge فرستادم و هی پیغام Wrong answer میده!!!هر کاری به ذهنم میومد کردم که دیگه به جایی قد نداد.
لطفا Help!!!
PC/UVa IDs:
110102/10189, Popularity: A, Success rate: high Level: 1
Have you ever played Minesweeper? This cute little game comes with a certain operating
system whose name we can’t remember. The goal of the game is to find where
all the mines are located within a
M × N field.
The game shows a number in a square which tells you how many mines there are
adjacent to that square. Each square has at most eight adjacent squares. The 4
×4 field
on the left contains two mines, each represented by a “
*” character. If we represent the
same field by the hint numbers described above, we end up with the field on the right:
*...
....
.*..
....
*100
2210
1*10
1110
Input
The input will consist of an arbitrary number of fields. The first line of each field
contains two integers
n and m (0 < n,m ≤ 100) which stand for the number of lines
and columns of the field, respectively. Each of the next
n lines contains exactly m
characters, representing the field.
Safe squares are denoted by “
.” and mine squares by “*,” both without the quotes.
The first field line where
n = m = 0 represents the end of input and should not be
processed.
Output
For each field, print the message
Field #x: on a line alone, where x stands for the
number of the field starting from 1. The next
n lines should contain the field with the
“
.” characters replaced by the number of mines adjacent to that square. There must
be an empty line between field outputs.
Sample Input
4 4
*...
....
.*..
....
3 5
**...
.....
.*...
0 0
Sample Output
Field #1:
*100
2210
1*10
1110
Field #2:
**100
33200
1*100
#include<iostream>
#include<string>
using namespace std;
char field[110][110];
int FindNo(char[][110],int,int );
void Print(char [][110]);
int n,m;
int cnt=0;
int main()
{
int q=0;
while(cin>>n>>m && n!=0 && m!=0)
{
q++;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
field[i][j]=' ';
}
}
for(int i=0;i<n;i++) { cin>>field[i];}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(field[i][j]=='*')
continue;
else
{
cnt=FindNo(field,i,j);
field[i][j]=cnt;
cnt=0;
}
}
}
cout<<endl<<"Field #"<<q<<":"<<endl;
Print(field);
cout<<endl;
}
return 0;
}
int FindNo(char a[][110],int i,int j)
{
int J;
J=j;
for(int k=i-1;k<=i+1;k++)
{
for(int z=j-1;z<=j+1;z++)
{
if(field[k][z]=='*')
cnt++;
}
j=J;
}
return cnt;
}
void Print(char a[][110])
{
int ch;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
ch=(int)a[i][j];
if(ch==42)
{cout<<'*';}
else
{cout<<ch;}
ch=0;
}
cout<<endl;
}
}