409 - Excuses, Excuses!

题目http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=350

找下面的句子中上面关键词出现的最多的句子 一样多的话按给的顺序输出

将下面的句子分解成小的只含字母字符串 然后依次与上面查找比较 找出数量最多的就行

View Code
 1 #include <stdio.h>
 2 #include<string.h>
 3 struct node
 4 {
 5     char c[25];
 6     int flag;
 7 };
 8 int strcm(char a[],char b[])
 9 {
10     int k, i,flag = 1;
11     if(strlen(a) == strlen(b))
12     {
13         for(i = 0 ; i < strlen(a) ; i++)
14         if(a[i]!=b[i]&&(a[i]-b[i] != 32)&&(b[i]-a[i]!=32))
15         {
16             flag = 0;
17             break;
18         }
19         if(flag == 0)
20         k = 0;
21         else
22         k = 1;
23     }
24     else
25     k = 0;
26     return k;
27 }
28 int main()
29 {
30     int i, j, k, n, m,count[100],g,x,max,lag,y = 0;
31     struct node a[25];
32     char str[100][72],b[72];
33     while(scanf("%d%d%*c", &n,&m)!=EOF)
34     {
35         y++;
36         memset(count, 0, sizeof(count));
37         for(i = 0 ; i < n; i++)
38         {
39             gets(a[i].c);
40         }
41         for(i = 1 ; i <= m ; i++)
42         {
43             gets(str[i]);
44             for(x = 0 ; x < n ; x++)
45             a[x].flag = 1;
46             k = strlen(str[i]);
47             g = 0;
48             j = 0;
49             while(j<k)
50             {
51                 lag = 0;
52                 while((str[i][j]>='a'&&str[i][j]<='z')||(str[i][j]>='A'&&str[i][j]<='Z'))
53                 {
54                     b[g] = str[i][j];
55                     j++;
56                     g++;
57                     lag = 1;
58                 }
59                 j++;
60                 if(lag == 1)
61                 {
62                     b[g] = '\0';
63                     for(x = 0 ; x < n ; x++)
64                     {
65                         if(a[x].flag!=0&&strcm(a[x].c,b) ==1)
66                         {
67                             count[i]++;
68                             a[x].flag = 0;
69                             break;
70                         }
71                     }
72                     g = 0;
73                 }
74             }
75         }
76         max = count[1];
77         for(i = 1 ; i <= m ; i++)
78         {
79             if(max<count[i])
80             max = count[i];
81 
82         }
83         printf("Excuse Set #%d\n", y);
84         for(i = 1; i <= m ; i++)
85         if(count[i] == max)
86         puts(str[i]);
87         puts("");
88     }
89     return 0;
90 }

 

posted @ 2012-05-30 00:39  _雨  阅读(266)  评论(0编辑  收藏  举报