地雷游戏
本题 将其简化为仅一行地雷。如右图所示,表中第一行有黑点的位置表示一颗地雷。而第二行每格中的数字表示与其相邻的三格中地雷的总数。 输入数据给定一行的格子数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;
}