1.题目
我们经常英文缩写,如IBM是International Business Machines的缩写。一个名字通常包含多个单词。一个单词以一个大写字母打头(“A”~”Z”),后面不跟或跟多个小写字母(“a”~”z”)。缩写是由每个单词的首字母组成。
现在,给出两个名字,要求你说出这两个名字的缩写是否相同。
2.输入
标准输入将包含多个测试案例。输入的第一行是一个整数T, 代表测试案例的格式。然后,是T组测试案例。
一组测试案例有四行。
第一行是一个整数N(1≤N≤5),表示第一个名字中单词的个数。
第二行显示了第一个名字。
第三行是一个整数M(1≤M≤5),表示第二个名字中单词的个数。
第四行显示了第二个名字。
每个名字由多个单词组成,单词间用一个空格隔开,每个单词的长度小于10个。每个单词的第一个字母是大写字母,其余字母是小写字母。
3.输出
结果应为标准输出。每个测试案例输出一行。如果两个名字的缩写相同,则输出”SAME”,否则,输出”DIFFERENT”。
4.输入案例
3
4
Super Harddisc Drive Cooler
3
Spade Heart Diamond Club
3
Shuai Ge Hao
4
C P C S
5.输出案例
SAME
SAME
DIFFERENT
解答:
本题是比较两个缩写词是否相同,而缩写词又是从一个包含多个单词的名字中合成的。每次读入一个单词,然后取出它的第一个字母,连接在字符串上,就组成了一个缩写词。
本题的难点在单词的读取控制上,对于输入数据的控制,是ACM竞赛中考查的一个重要方面。
另外,大家可以试试,使用printf输出比使用cout输出快很多。
//abbreviation.cpp
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
//ifstream cin("aaa.txt");
string s,ssa,ssb;
int t,n,m;
cin>>t;
for (int i=0;i<t;i++)
{
cin>>n;
for (int j=0;j<n;j++)
{
cin>>s;
ssa=ssa+s[0];
}
cin>>m;
for (int k=0;k<m;k++)
{
cin>>s;
ssb=ssb+s[0];
}
if(ssa.compare(ssb) == 0) //相等返回0,大于返回1,小于返回-1
//cout<<"SAME"<<endl;
printf("SAME\n");
else
//cout<<"DIFFERENT"<<endl;
printf("DIFFERENT\n");
ssa="";
ssb="";
}
return 0;
}
效果如下: