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 }

 

你可能感兴趣的:(c)