面积(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 }