地雷游戏
本题 将其简化为仅一行地雷。如右图所示,表中第一行有黑点的位置表示一颗地雷。而第二行每格中的数字表示与其相邻的三格中地雷的总数。 输入数据给定一行的格子数n(n<=10000)和第二行的各个数字,编程求第一行的地雷分布。
输入:
8
2 2 2 2 3 2 2 1
输出:
1 1 0 1 1 1 0 1
题解:
#include<stdio.h>
int n,a[10001],b[10001];
int find(){
int i;
for(i=1;i<n;i++){
b[i+1]=a[i]-b[i-1]-b[i];
if(b[i+1]<0 ||b[i+1]>1){
return 0;
}
}
if(b[n]>0){
return 0;
}
return 1;
}
int main(){
int i,j,flag;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
if(a[0]==0){//由a[0]确定b[0].b[1],之后的 b[i+1],a[i],b[i-1],b[i]推出
b[0]=0;
b[1]=0;
}
if(a[0]==1){
b[0]=0;
b[1]=1;
}
if(a[0]==2){
b[0]=1;
b[1]=1;
}
flag=find();
if( flag==0 && a[0]==1 ){
b[0]=1;
b[1]=0;
}
flag=find();
if(flag==0){
printf("No answer");
}
else{
for(i=0;i<n;i++){
printf("%d ",b[i]);
}
}
return 0;
}