openjudge 2801

2.4 填词

其实这是个很简单的问题,但是题目有一定的误导性,因为题中故意说了单词出现的方向只能是竖直的或者水平的。我开始看到这个题目的时候,一直在想是不是得搜索每个字符的具体位置在哪?然后就陷入这个搜索问题中去了。后来突然想想不对啊。输出的答案和这个位置到底有没有确定是不相关的啊,我只要把P个单词中出现的字符给扣除掉,剩下的就是字符再按照字典顺序就是题中要求的输出了啊,然后一看解析,果然如自己后来想的这样。看来以后还是得关注下要的输出是什么? 下面代码已经AC。

 1 #include<stdio.h>
 2 #define NUM 101
 3 int main(void)
 4 {
 5     int cnt[26];//存储每个大写字母出现的次数
 6     int N,M,P;
 7     int i,j;
 8     char temp[NUM];
 9     scanf("%d %d %d",&N,&M,&P);
10     for(i=0;i<26;i++)
11         cnt[i] = 0;
12     //N*M方格中的字符
13     while(N-->0)
14     {
15         scanf("%s",temp);
16         j=0;
17         while(temp[j]!='\0')
18         {
19             cnt[temp[j]-'A']++;
20             j++;
21         }
22     }
23     //题中给出要找到的单词
24     while(P-->0)
25     {
26         scanf("%s",temp);
27         j=0;
28         while(temp[j]!='\0')
29         {
30             cnt[temp[j]-'A']--;
31             j++;
32         }
33     }
34     //按字典顺序打印剩余字符
35     for(i=0;i<26;i++)
36     {
37         if(cnt[i]>0)
38             while(cnt[i]-->0)
39                 printf("%c",i+'A');
40     }
41     printf("\n");
42     return 0;
43 }

 

posted @ 2014-04-16 00:42  echoht  阅读(192)  评论(0)    收藏  举报