hdu 4414 Finding crosses

  题目链接:hdu 4414

  其实是一道简单的字符型水题,不涉及任何算法,可比赛时却没能做出来,这几天的状态都差到家了。。。

  题目大意是求有多少个满足条件的十字架,十字架的边不能有分叉路口,所以枚举每个点看是否满足条件就行,只是编码量的问题而已(感觉自己的码力不断下降了,我也不知道该怎么办好。。)

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 char s[52][52];
 7 int n;
 8 
 9 int check(int x, int y) {
10     if(s[x][y] != '#')    return 0;
11     int up = 0, down = 0, left = 0, right = 0;
12     for(int i = x - 1; i >= 0; --i) {
13         if(s[i][y] == '#')   ++up;
14         else    break;
15         if(s[i][y - 1] == '#' || s[i][y + 1] == '#')    return 1;
16     }
17     if(up == 0)    return 2;
18 
19     for(int i = x + 1; i <= n - 1; ++i) {
20         if(s[i][y] == '#')   ++down;
21         else    break;
22         if(s[i][y - 1] == '#' || s[i][y + 1] == '#')    return 3;
23     }
24     if(down == 0)    return 4;
25 
26     if(up != down)   return 5;
27 
28     for(int j = y - 1; j >= 0; --j) {
29         if(s[x][j] == '#')   ++left;
30         else    break;
31         if(s[x - 1][j] == '#' || s[x + 1][j] == '#')    return 6;
32     }
33     if(left == 0)    return 7;
34 
35     for(int j = y + 1; j <= n - 1; ++j) {
36         if(s[x][j] == '#')   ++right;
37         else    break;
38         if(s[x - 1][j] == '#' || s[x + 1][j] == '#')    return 8;
39     }
40     if(right == 0)    return 9;
41 
42     if(left != right)   return 10;
43 
44     if(up != left)    return 11;
45 
46     return 12;
47 }
48 
49 int main() {
50     while(~scanf("%d",&n),n) {
51         for(int i = 0; i < n; ++i)
52             scanf("%s",s[i]);
53         int cnt = 0;
54         for(int i = 1; i < n - 1; ++i)
55             for(int j = 1; j < n - 1; ++j)
56                 if(check(i,j) == 12)   ++cnt;
57         printf("%d\n",cnt);
58     }
59     return 0;
60 }

  学到了这种调试方法,每一步的 return 值都不同,这样子调试程序时就能很清楚问题是出在哪儿,在哪儿的运行和自己想的不一样。原本我把 check 函数定义为 bool 返回类型,每个不合法的都返回 0,最后那个 return 才返回 1,这样子原则上可以,但一旦出错却不知错在哪一步,所以以后记得在编码上需灵活一些,别再纠结于那些所谓的节省内存等问题了!!!

posted @ 2015-09-18 10:02  Newdawn_ALM  阅读(159)  评论(0编辑  收藏  举报