3
5
2015
0

UVa 10189 Minesweeper

#include <cstdio>
#define ok(p,q) p>0 && p<=n && q>0 && q<=m && a[p][q]=='*' //用宏简化代码
int n,m,x;
char a[101][101];

int main()
{
	scanf("%d%d",&n,&m);
	while (n!=0){
		printf ("Field #%d:\n",++x);
		getchar();
		for (int i=1;i<=n;++i,getchar())
			for (int j=1;j<=m;++j)
				a[i][j]=getchar();
		for (int i=1;i<=n;++i,putchar('\n'))
			for (int j=1;j<=m;++j){
				if (a[i][j]=='*'){ //是雷直接输出
					putchar('*');
					continue;
				}
				a[i][j]='0'; //直接用ascii码操作
				if (ok(i-1,j-1)) ++a[i][j];
				if (ok(i-1,j))   ++a[i][j];
				if (ok(i-1,j+1)) ++a[i][j];
				if (ok(i,j-1))   ++a[i][j];
				if (ok(i,j+1))   ++a[i][j];
				if (ok(i+1,j-1)) ++a[i][j];
				if (ok(i+1,j))   ++a[i][j];
				if (ok(i+1,j+1)) ++a[i][j];
				putchar(a[i][j]);
			}
		scanf("%d%d",&n,&m);
		if (n) putchar('\n'); //惨痛的教训,最后一个矩阵后不加空行
	}
	return 0;
}
Category: 题解 | Tags: UVa 挑战编程 模拟
3
5
2015
1

UVa 10038 Jolly Jumper

#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;

int n,a[3000];
bool b[3000];
int main()
{
	while (cin>>n){
		memset(b,0,sizeof(b));
		for (int i=0;i<n;++i)
			cin>>a[i];
		for (int i=1;i<n;++i){
			int x=abs(a[i]-a[i-1]);//相邻差的绝对值
			if (x==0 || x>=n || b[x]){//若x不在范围内或前面已经有过了,
				cout<<"Not jolly"<<endl; //肯定不是jolly jumper,跳出
				goto next;
			}
			b[x]=1;
		}
		cout<<"Jolly"<<endl;//前面都没跳出,就是jolly jumper
		next:;
	}
	return 0;
}
Category: 题解 | Tags: UVa 挑战编程 模拟

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com