您的位置:首页 > 其它

UVA - 409 Excuses, Excuses!

2016-08-20 01:42 387 查看

UVA - 409 Excuses, Excuses!

逻辑依旧乱……

题目大意:给关键字列表和句子,输出出现关键字次数最多的句子。(大概?)不区分大小写。

解题思路:关键字存一个数组,句子存一个数组。一个字符串用来保存句子中每一个单词并全转化为小写。将这个字符串和关键字组匹配,找到就计数器++。计数器是开了一个与句子个数相同的数组,为了方便同时保存下标和关键字出现次数。输出的时候先找出最高出现次数,之后再找和其次数一样的下标。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<ctype.h>
using namespace std;
int main() {
int k , e , n = 0 , cal , i , j ,l , m ,max, max2;
char key[20][20] , tem[75] , exc[20][75];
int nom[20];
while(~scanf("%d%d",&k,&e)){
getchar();
n++;
for( i = 0; i < k ; i++)
cin >> key[i];
getchar();
for( i = 0; i < e ; i++) {
cin.getline( exc[i] , 75);
}
memset( nom , 0 , 20 );
for( i = 0; i < e; i++) {
max2 = 0;
for( j = 0, l = 0; j <strlen(exc[i]) ; j++ ) {
if( isalpha( exc[i][j] ) ) {
tem[l] = exc[i][j];
tem[l] = tolower(tem[l]);
l++;
}
else {
tem[l] = '\0'; l = 0;
for( m = 0; m < k ; m++) {
if(!strcmp( tem , key[m])) max2++;
}
nom[i] = max2;
}
}
}
max = nom[0];cal = 0;
for( m = 0; m < e ; m++ ) {
if( nom[m] > max ) {max = nom[m]; cal = m;  }
}
cout<<"Excuse Set #"<< n << endl << exc[cal]<< endl;
for( m = 0 ; m < e ; m++ )
if( nom[m] == max && m != cal)  cout << exc[m]<< endl;
cout << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva