标签:
描述
在一个正方形的灰度图片上,肿瘤是一块矩形的区域,肿瘤的边缘所在的像素点在图片中用0表示。其它肿瘤内和肿瘤外的点都用255表示。现在要求你编写一个程序,计算肿瘤内部的像素点的个数(不包括肿瘤边缘上的点)。已知肿瘤的边缘平行于图像的边缘。
输入
只有一个测试样例。第一行有一个整数n,表示正方形图像的边长。其后n行每行有n个整数,取值为0或255。整数之间用一个空格隔开。已知n不大于1000。
输出
输出一行,该行包含一个整数,为要求的肿瘤内的像素点的个数。
样例输入
5 255 255 255 255 255 255 0 0 0 255 255 0 255 0 255 255 0 0 0 255 255 255 255 255 255
样例输出
1
1 #include<cstdio> 2 3 const int maxn = 1000+5; 4 int pic[maxn][maxn]; 5 6 int main() { 7 int n, begin[2], end[2], t=0; 8 scanf("%d",&n); 9 for(int i=0; i<n; i++) 10 for(int j=0; j<n; j++) 11 scanf("%d", &pic[i][j]); 12 for(int i=0; i<n; i++){ 13 if(t) break; 14 for(int j=0; j<n; j++) { 15 if(!pic[i][j]) { 16 begin[0]=i; 17 begin[1]=j; 18 t=1; 19 break; 20 } 21 } 22 } 23 for(int i=n-1; i>=0; i--) { 24 if(!t) break; 25 for(int j=n-1; j>=0; j--) { 26 if(!pic[i][j]) { 27 end[0]=i; 28 end[1]=j; 29 t=0; 30 break; 31 } 32 } 33 } 34 int s=(end[0]-begin[0]-1)*(end[1]-begin[1]-1); 35 printf("%d\n" ,s); 36 return 0; 37 }
有个细节:比较大的数组尽量声明在main函数外,因为 main()里面用的是程序的栈,WINDOWS栈空间为1M,即1024*1024=1048576字节 。
这题也很水,不过由于数据录入过多,不能用iostream,否则超时
标签:
原文地址:http://www.cnblogs.com/liangyongrui/p/4286961.html