《acm程序设计》书中题目W-23

来源:互联网 发布:warframe淘宝国际服 编辑:程序博客网 时间:2024/06/05 06:11

(欢迎阅读我的博客,如发现错误或有建议请评论留言,谢谢。)

题目要求:

输入一个二维数组来表示一片草地,1代表未修剪,0代表已修建。若草坪未修剪或相邻两块都被修剪则为不美丽,否则的话为美丽,美丽输出“Yes”不美丽输出“No”。

题目思路:

先检查是否有0,没有的话直接结束并输出“No”,若存在0,则检查是否有两个0是相邻的。

代码如下:

#include<iostream>
using namespace std;
int main()
{
    int a[100][10][10],n[100],m[100],h[100],w[100]={0},s=0,i,j,k;
    while(1)
    {
        cin>>n[s]>>m[s];
        if(n[s]==0)
        break;
        for(i=0;i<n[s];i++)
        {
            for(j=0;j<m[s];j++)
            cin>>a[s][i][j];
            }
          s++;
         }
         for(i=0;i<s;i++)
         {
             for(j=0;j<n[i];j++)
             {
                 for(k=0;k<m[i];k++)
                 {
                     if(a[i][j][k]==0)
                     h[i]++;
                     }
                 }




             for(j=0;j<n[i]-1;j++)
             {
                 for(k=0;k<m[i]-1;k++)
                 {
                     if(a[i][j][k]==0&&(a[i][j][k+1]==0||a[i][j+1][k]==0))
                     w[i]++;
                     }
                }




             j=n[i]-1;
                 for(k=0;k<m[i]-1;k++)
                 {
                     if(a[i][j][k]==0&&a[i][j][k+1]==0)
                     w[i]++;
                     }


             for(j=0;j<n[i]-1;j++)
             {
                 k=m[i]-1;
                 if(a[i][j][k]==0&&a[i][j+1][k]==0)
                 w[i]++;
                 }


             if(h[i]>0&&w[i]==0)
             cout<<"Yes"<<endl;
             else
             cout<<"No"<<endl;


         }
         }

0 0