zoj 1051 A New Growth Industry

//题目一直没理解题意。后来实在忍不住看了一下别人的代码分析,听不错的就按照别人的来了

思路:题目不是很难。涉及了二维数组的指针,长久不用有些遗忘了。。
列数固定的二维指针形式 :int dish[20][20];  int (*curr)[20] = dish;
如果不定列数的二维数组作参数可以用一维实现,直接 int ** 不行。

#include<iostream>
#include<cstdio>

using namespace std;

int dish[20][20];
int dish2[20][20];
char rep[4]={'.','!','X','#'};


int densities(int x,int y,int p[20][20])
{
    int sum=0;
    sum+=p[x][y];
    if(x-1>=0)
         sum+=p[x-1][y];
    if(y-1>=0)
        sum+=p[x][y-1];
    if(x+1<20)
        sum+=p[x+1][y];
    if(y+1<20)
        sum+=p[x][y+1];
    return sum;
}

int main()
{
    int n,day,den;
    int d[16];
    int (*curr)[20] = dish;
    int (*next)[20] = dish2;
    int (*tmp)[20];
    int i,j,k;

    cin>>n;
    while(n--)
    {

        cin>>day;
        for(i=0; i<16; i++)
            cin>>d[i];
            for(i=0; i<20; i++)
                for(j=0; j<20; j++)
                cin>>curr[i][j];
        for(k=0; k<day; k++)
        {
            for(i=0; i<20; i++)
            {
                for(j=0; j<20; j++)
                {
                   den=densities(i,j,curr) ;
                   next[i][j] = curr[i][j]+d[den];

                    //范围修正
                    if(next[i][j]>3)
                        next[i][j]=3;
                    else if(next[i][j]<0)
                        next[i][j]=0;
                }
            }
            tmp=next;
            next=curr;
            curr=tmp;

        }
          for(int i=0;i<20;i++)
        {
            for(int j=0;j<20;j++)
                printf("%c",rep[curr[i][j]]);
            printf("\n");
        }

        if(n!=0)
            cout<<endl;
    }

    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值