题目本意:
在中国,形容夫妻恩爱的词汇中,大家用的比较多的就是“夫妻相”。所谓“夫妻相”,就是两个人看上去比较般配,长相、身材等某些方面有一定的相似度。
本题则另辟蹊径,从人的姓名维度,以字母重复个数来寻找最具“夫妻相”的人。
题目中预先给定一组女士的姓名拼音。输入男士的姓名拼音(拼音中间可以有空格,字母全部小写),依预先给定姓名拼音的先后遍历所有姓名,输出字母重复数最多的女士姓名。
规则1:如果字母重复数最多的女士有多位相同,则以最先匹配的女士做为最具“夫妻相”的人选。
规则2:人名中的相同字母,按重复一次处理。例如:li ling 与li lei 重复的字符个数为2,而不是4。
代码:
char szname[10][26] = { "nan chi", "zhang san", "li si", "wang wu", "liu fu", "zhu yi" "ren cheng sa", "wu li feng", "zhang bo zhi", "zhao min" };
inline int findCnt(bool a[], bool b[])
{
int cnt = 0;
for (int i = 0; i < 26;i++)
{
if (a[i] && b[i])
cnt++;
}
return cnt;
}
int _tmain()
{
char name[26] = { 0 };
gets(name);
bool flag_girls[10][26] = { 0 };
for (int i = 0; i < 10;i++)
{
for (int j = 0; szname[i][j] <= 'z'&&szname[i][j] >= 'a';j++)
{
flag_girls[i][j] = true;
}
}
bool flag_boys[26] = { 0 };
for (int i = 0; name[i] <= 'z'&&name[i] >= 'a';i++)
{
flag_boys[i] = true;
}
int cnt[10];
int max = 0;
for (int i = 0; i < 10;i++)
{
cnt[i] = findCnt(flag_girls[i], flag_boys);
if (cnt[i]>max)
{
max = cnt[i];
}
}
for (int i = 0; i < 10;i++)
{
if (max==cnt[i])
{
cout << "很相配的名字为:" << szname[i] << endl;
break;
}
}
system("pause");
return 0;
}
输出结果: