面积(area)

面积(area)

【题目】

编程计算由“*”号围成的下列图形的面积。面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目。如下图所示,在10*10的二维数组中,有“*”围住了15个点,因此面积为15。
 (1就相当于*)

【样例输入】area.in

0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 0 0 0
0 0 0 0 1 0 0 1 0 0
0 0 0 0 0 1 0 0 1 0
0 0 1 0 0 0 1 0 1 0
0 1 0 1 0 1 0 0 1 0
0 1 0 0 1 1 0 1 1 0
0 0 1 0 0 0 0 1 0 0
0 0 0 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0

【样例输出】area.out

15

【代码】

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<string>
 6 #include<cmath>
 7 #include<algorithm>
 8 
 9 using namespace std;
10 
11 int z[101][101];
12 
13 int main() {
14     int i,j,k=0;//用k保存个数
15     for(i=1; i<=10; i++)
16         for(j=1; j<=10; j++)
17             scanf("%d",&z[i][j]);
18     for(i=1; i<=10; i++) { //将边界都赋值为2
19         for(j=1; j<=10; j++) {
20             if((i==1||i==10)&&z[i][j]==0) z[i][j]=2;
21             if((j==1||j==10)&&z[i][j]==0) z[i][j]=2;
22         }
23     }
24     for(i=1; i<=10; i++)
25         for(j=1; j<=10; j++)
26             if(z[i][j]==0&&(z[i][j+1]==2||z[i][j-1]==2||z[i-1][j]==2||z[i+1][j]==2))//如果为零,并且它的上下左右之中有一个为2,则将它赋值为2
27                 z[i][j]=2;
28     for(i=1; i<=10; i++)
29         for(j=1; j<=10; j++)
30             if(z[i][j]==0)//统计剩余0的个数
31                 k++;
32     printf("%d",k);//输出0的个数,即为其面积
33     return 0;
34 }

 

posted @ 2017-03-28 19:19  夜雨声不烦  阅读(395)  评论(0编辑  收藏  举报