Re: 10189 - Minesweeper
Posted: Wed Feb 11, 2015 9:55 pm
There must be an empty line between field outputs. Don't print an extra blank line at the end.
Code: Select all
#include <stdio.h>
#define MAX_NUM 100
#define STAR 777
int answer[100][100];
int subset[8][2] = {
{-1, -1},
{-1, 0},
{-1, 1},
{0, -1},
{0, 1},
{1, -1},
{1, 0},
{1, 1}
};
int N, M;
void increase_adjacent_field(int n, int m)
{
int i;
int _n, _m;
for (i = 0; i < 8; i++) {
_n = n + subset[i][0];
_m = m + subset[i][1];
if (_n >= 0 && _n < N && _m >= 0 && _m < M)
if (answer[_n][_m] != STAR)
answer[_n][_m] += 1;
}
}
int main(void)
{
int i, j;
char ch;
int count = 1;
while (scanf("%d %d", &N, &M) != EOF) {
if (!N && !M)
break;
for (i = 0; i < N; i++) {
j = 0;
while(j < M) {
scanf("%c", &ch);
if (ch == '*')
answer[i][j++] = STAR;
else if (ch == '.')
answer[i][j++] = 0;
}
}
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
if (answer[i][j] == STAR)
increase_adjacent_field(i, j);
printf("Field #%d:\n", count);
for (i = 0; i < N; i++) {
for (j = 0; j < M; j++) {
if (answer[i][j] == STAR)
printf("*");
else
printf("%d", answer[i][j]);
}
printf("\n");
}
count++;
printf("\n");
}
return 0;
}
brianfry713 wrote:There must be an empty line between field outputs. Don't print an extra blank line at the end.
Code: Select all
#include <iostream>
#include <string>
#include <stdlib.h>
#include <cstring>
using namespace std;
int main()
{
int m,n,field=1;
char checa[10000];
cin>>checa;
m=atoi(checa);
memset(checa,NULL,10000);
int cont=0,maximo=0;
while(cin>>n)
{
if(n!=0 || m!=0)
{
int tam=strlen(checa);
maximo=tam;
do{
if(m==0) {cout<<"Field #"<<field<<":"<<endl; field++;}
else if(n==0)
{
cout<<"Field #"<<field<<":"<<endl;
field++;
for(int i=0;i<m;i++)
cout<<endl;
}
else{
char campo [105][105];
//preenche o campo
for(int l=0;l<m;l++)
{
for(int c=0;c<n;c++)
{
campo[l][c]='.';
}
}
for(int l=0;l<m;l++)
{
for(int c=0;c<n;c++)
{
if(tam>0){
campo[l][c]=checa[cont++];
tam--;
if(cont==maximo) cont=0;
}
else{
cin>>campo[l][c];
}
}
}
cout<<"Field #"<<field<<":"<<endl;
field++;
//função preenche (nao se stressar :p)
for(int l=0;l<m;l++)
{
for(int c=0;c<n;c++)
{
if(campo[l][c]!='*')
{
//verificando casas adjacentes
int minas=0;
if(l!=0)
{
if((campo[l-1][c])=='*') minas++;
if(c<n-1)
{
if((campo[l-1][c+1])=='*') minas++;
}
if(c>0)
{
if((campo[l-1][c-1])=='*') minas++;
}
}
if(l<m-1)
{
if((campo[l+1][c])=='*') minas++;
if(c<n-1)
{
if((campo[l+1][c+1])=='*') minas++;
}
if(c>0)
{
if((campo[l+1][c-1])=='*') minas++;
}
}
if(c>0)
{
if((campo[l][c-1])=='*') minas++;
}
if(c<n-1)
{
if((campo[l][c+1])=='*') minas++;
}
cout<<minas;
}
else
cout<<campo[l][c];
}
cout<<endl;
}
//acabou!!!!!!!!!!!!
cout<<endl;
}
if(tam==0){
cin>>checa;
tam=strlen(checa);
if(checa[0]=='0')
{
tam=0;
m=0;
memset(checa,NULL,10000);
}
}
if(atoi(checa)!=0)
{
m=atoi(checa);
memset(checa,NULL,10000);
tam=strlen(checa);
break;
}
}while(tam>0);
}
else
{
break;
}
}
return 0;
}
brianfry713 wrote:brianfry713 wrote:There must be an empty line between field outputs. Don't print an extra blank line at the end.
Then press enter , then paste the rest :4 4
However if i paste a single test case all at the same time nothing happens , and if i do it on ideone i get run-time error.*...
....
.*..
....
Code: Select all
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int field=0;
public static void main(String [] args) throws IOException{
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer s=new StringTokenizer(bf.readLine());
int b=Integer.parseInt(s.nextToken()), a=Integer.parseInt(s.nextToken());
while(b!=0 && a!=0){
field++;
mine(b,a);
s=new StringTokenizer(bf.readLine());
b=Integer.parseInt(s.nextToken()); a=Integer.parseInt(s.nextToken());
}
}
public static void mine(int a,int b) throws IOException{
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
boolean array_first=false,array_last=false,string_first=false,string_last=false;
String []x=new String[a];
for(int i=0;i<a;i++)
x[i]=bf.readLine();
System.out.println("Field #"+field+":");
for(int i=0;i<a;i++){
array_first=(i==0)?true:false;
array_last=(i==a-1)?true:false;
for(int j=0; j<b; j++){
string_first=(j==0)?true:false;
string_last=(j==b-1)?true:false;
int counter=0;
if(x[i].charAt(j)!='*'){
if(!string_first){
if(x[i].charAt(j-1)=='*')
counter++;
if(!array_first && x[i-1].charAt(j-1)=='*')
counter++;
if(!array_last && x[i+1].charAt(j-1)=='*')
counter++;
}
if(!string_last ){
if(x[i].charAt(j+1)=='*')
counter++;
if(!array_first && x[i-1].charAt(j+1)=='*')
counter++;
if(!array_last && x[i+1].charAt(j+1)=='*')
counter++;
}
if(!array_first && x[i-1].charAt(j)=='*')
counter++;
if(!array_last && x[i+1].charAt(j)=='*')
counter++;
System.out.print(counter);
}
else
System.out.print('*');
}
System.out.println();
}
System.out.println();
}
}
Code: Select all
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
int h, w, num, count = 0;
while(cin >> h >> w)
{
if ((h == 0) && (w == 0))
{
return 0;
}
if (count >= 1)
cout << endl;
count++;
char board[h][w];
char digits[] = {'0','1','2','3','4','5','6','7','8','9'};
for(int a = 0; a < h; a++)
{
for(int b = 0; b < w; b++)
{
cin >> board[a][b];
}
}
for(int a = 0; a < h; a++)
{
for(int b = 0; b < w; b++)
{
num = 0;
if ((h ==1) && (w == 1) && (board[a][b] == '.'))
{
board[a][b] = '0';
}
else if (h == 1)
{
if (b == 0 && board[a][b] == '.')
{
if (board[a][b+1] == '*')
num++;
board[a][b] = digits[num];
}
else if (b == w-1 && board[a][b] == '.')
{
if (board[a][b-1] == '*')
num++;
board[a][b] = digits[num];
}
else if (board[a][b] == '.')
{
if (board[a][b-1] == '*')
num++;
if (board[a][b+1] == '*')
num++;
board[a][b] = digits[num];
}
}
else if (w == 1)
{
if (a == 0 && board[a][b] == '.')
{
if (board[a+1][b] == '*')
num++;
board[a][b] = digits[num];
}
else if (a == h-1 && board[a][b] == '.')
{
if (board[a-1][b] == '*')
num++;
board[a][b] = digits[num];
}
else if (board[a][b] == '.')
{
if (board[a-1][b] == '*')
num++;
if (board[a+1][b] == '*')
num++;
board[a][b] = digits[num];
}
}
else if ((a == 0) && (b == 0) && (board[a][b] == '.'))
{
if (board[a][b+1] == '*')
num++;
if (board[a+1][b] == '*')
num++;
if (board[a+1][b+1] == '*')
num++;
board[a][b] = digits[num];
}
else if ((a == 0) && (b == w-1) && (board[a][b] == '.'))
{
if (board[a][b-1] == '*')
num++;
if (board[a+1][b] == '*')
num++;
if (board[a+1][b-1] == '*')
num++;
board[a][b] = digits[num];
}
else if (((a == 0) && ((b != 0) || (b != w-1))) && (board[a][b] == '.'))
{
if (board[a][b-1] == '*')
num++;
if (board[a+1][b] == '*')
num++;
if (board[a][b+1] == '*')
num++;
if (board[a+1][b-1] == '*')
num++;
if (board[a+1][b+1] == '*')
num++;
board[a][b] = digits[num];
}
else if ((a == h-1) && (b == 0) && (board[a][b] == '.'))
{
if (board[a-1][b] == '*')
num++;
if (board[a][b+1] == '*')
num++;
if (board[a-1][b+1] == '*')
num++;
board[a][b] = digits[num];
}
else if ((a == h-1) && (b == w-1) && (board[a][b] == '.'))
{
if (board[a][b-1] == '*')
num++;
if (board[a-1][b] == '*')
num++;
if (board[-1][b-1] == '*')
num++;
board[a][b] = digits[num];
}
else if (((a == h-1) && ((b != 0) || (b != w-1))) && (board[a][b] == '.'))
{
if (board[a][b-1] == '*')
num++;
if (board[a-1][b] == '*')
num++;
if (board[a][b+1] == '*')
num++;
if (board[a-1][b+1] == '*')
num++;
if (board[a-1][b-1] == '*')
num++;
board[a][b] = digits[num];
}
else if (((b == 0) && ((a != 0) || (a != h-1))) && (board[a][b] == '.'))
{
if (board[a-1][b] == '*')
num++;
if (board[a][b+1] == '*')
num++;
if (board[a+1][b] == '*')
num++;
if (board[a-1][b+1] == '*')
num++;
if (board[a+1][b+1] == '*')
num++;
board[a][b] = digits[num];
}
else if (((b == w-1) && ((a != 0) || (a != h-1))) && (board[a][b] == '.'))
{
if (board[a-1][b] == '*')
num++;
if (board[a-1][b-1] == '*')
num++;
if (board[a][b-1] == '*')
num++;
if (board[a+1][b-1] == '*')
num++;
if (board[a+1][b] == '*')
num++;
board[a][b] = digits[num];
}
else if (board[a][b] == '.')
{
if (board[a-1][b-1] == '*')
num++;
if (board[a-1][b] == '*')
num++;
if (board[a-1][b+1] == '*')
num++;
if (board[a][b-1] == '*')
num++;
if (board[a][b+1] == '*')
num++;
if (board[a+1][b-1] == '*')
num++;
if (board[a+1][b] == '*')
num++;
if (board[a+1][b+1] == '*')
num++;
board[a][b] = digits[num];
}
}
}
cout << "Field #" << count << ":\n";
for(int a = 0; a < h; a++)
{
for(int b = 0; b < w; b++)
{
cout << board[a][b];
}
cout << endl;
}
}
return 0;
}
Code: Select all
#include<bits/stdc++.h>
int main()
{
char n[110][110],li[110] ;
int m[110][110],a,b,i,j=0,k=0;
while(1)
{
k++;
scanf("%d %d",&a,&b);
if(a==0&&b==0)
break;
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
n[i][j]='\0';
m[i][j]=0;
}
}
for(i=0;i<a;i++)
{
scanf("%s",li);
for(j=0;j<b;j++)
{
n[i][j]=li[j];
}
}
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
if(n[i][j]=='*')
{
m[i][j]=9;
if(j-1>=0&&m[i][j-1]!=9)
m[i][j-1]+=1;
if(j+1<b&&m[i][j+1]!=9)
m[i][j+1]+=1;
if(i-1>=0&&m[i-1][j]!=9)
m[i-1][j]+=1;
if(i+1<a&&m[i+1][j]!=9)
m[i+1][j]+=1;
if(i-1>=0&&j-1>=0&&m[i-1][j-1]!=9)
m[i-1][j-1]+=1;
if(i+1<a&&j+1<b&&m[i+1][j+1]!=9)
m[i+1][j+1]+=1;
if(i-1>=0&&j+1<b&&m[i-1][j+1]!=9)
m[i-1][j+1]+=1;
if(i+1<a&&j-1>=0&&m[i+1][j-1]!=9)
m[i+1][j-1]+=1;
}
}
}
if(k>1)
printf("\n\n");
printf("Field #%d:\n",k);
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
if(m[i][j]==9)
printf("*");
else
printf("%d",m[i][j]);
}
if(i!=a-1)
printf("\n");
}
}
return 0;
}
Code: Select all
#include <stdio.h>
int compute(char st[1000][1000], int, int, int, int);
int main()
{
char st[1000][1000], linebreak;
int f_no, m, n, i, j;
/* freopen("input.txt", "r", stdin);*/
for(scanf(" %d %d", &m, &n), f_no=0; m!=0 && n!=0; scanf(" %d %d", &m, &n), f_no++){
for(i=0; i<m; i++){
for(j=0; j<n; j++) scanf("%c", &st[i][j]);
scanf("%c", &linebreak);
}
printf("Field #%d:\n", f_no+1);
for(i=0; i<m; i++){
for(j=0; j<n; j++) {
if(st[i][j]=='*') printf("%c", st[i][j]);
else printf("%d", compute(st, i, j, m, n));
}
printf("\n");
}
}
return 0;
}
int compute(char st[1000][1000], int i, int j, int m, int n)
{
int count=0, ineg=0, ipos=0, jneg=0, jpos=0;
if(i-1>=0) ineg=1;
if(i+1<m) ipos=1;
if(j-1>=0) jneg=1;
if(j+1<n) jpos=1;
if(ineg && jneg && st[i-1][j-1]=='*') count++;
if(ineg && st[i-1][j]=='*') count++;
if(ineg && jpos && st[i-1][j+1]=='*') count++;
if(jneg && st[i][j-1]=='*') count++;
if(st[i][j]=='*') count++;
if(jpos && st[i][j+1]=='*') count++;
if(ipos && jneg && st[i+1][j-1]=='*') count++;
if(ipos && st[i+1][j]=='*') count++;
if(ipos && jpos && st[i+1][j+1]=='*') count++;
return count;
}