POJ 1120

来源:互联网 发布:英雄无敌for mac 编辑:程序博客网 时间:2024/06/06 10:07

题意:给一个20*20矩阵,每个位置上有一个0-3之间的值,给定16个元素的数组D,对于矩阵的每个元素,它的变化为D[k],其中k为自身元素+上下左右元素的和。最后,根据最后的矩阵输出响应的字符。

//11222749c00h00g1120Accepted168K0MSC++1363B2013-01-30 17:20:08//WA 2次 原因:这题目不是以EOF结束,而且只有一组测试样例 #include<stdio.h>#include<stdlib.h>int day;int d[16];int mat[20][20];int tmp[20][20];int dir[4][2]={{0,1},{-1,0},{0,-1},{1,0}};int calk(int x,int y){    int sum=mat[x][y];    for(int i=0;i<4;i++){        int xx=x+dir[i][0];        int yy=y+dir[i][1];        if(xx>=0&&xx<20&&yy>=0&&yy<20)           sum+=mat[xx][yy];    }    return sum;}int main(){        scanf("%d",&day);{        for(int i=0;i<16;i++)            scanf("%d",&d[i]);        for(int i=0;i<20;i++)            for(int j=0;j<20;j++)                scanf("%d",&mat[i][j]);        while(day--){            for(int i=0;i<20;i++)                for(int j=0;j<20;j++){                    tmp[i][j]=0;                    tmp[i][j]=mat[i][j]+d[calk(i,j)];                    if(tmp[i][j]<0) tmp[i][j]=0;                    if(tmp[i][j]>3) tmp[i][j]=3;                }            for(int i=0;i<20;i++)                for(int j=0;j<20;j++)                    mat[i][j]=tmp[i][j];        }                for(int i=0;i<20;i++){            for(int j=0;j<20;j++){                if(mat[i][j]==0) printf(".");                if(mat[i][j]==1) printf("!");                if(mat[i][j]==2) printf("X");                if(mat[i][j]==3) printf("#");            }            printf("\n");        }    }    return 0;}


原创粉丝点击