首页 > 代码库 > 华为机试—姓名的夫妻相
华为机试—姓名的夫妻相
题目:夫妻相
在中国,形容夫妻恩爱的词汇中,大家用的比较多的就是“夫妻相”。所谓“夫妻相”,就是两个人看上去比较般配,长相、身材等某些方面有一定的相似度。
本题则另辟蹊径,从人的姓名维度,以字母重复个数来寻找最具“夫妻相”的人。
题目中预先给定一组女士的姓名拼音。输入男士的姓名拼音(拼音中间可以有空格,字母全部小写),依预先给定姓名拼音的先后遍历所有姓名,输出字母重复数最多的女士姓名。
规则1:如果字母重复数最多的女士有多位相同,则以最先匹配的女士做为最具“夫妻相”的人选。
规则2:人名中的相同字母,按重复一次处理。例如:li ling 与li lei 重复的字符个数为2,而不是4。
预置女士名单(先后循序必须保证):
"wang fei",
"zhang man yu",
"zhang zhi yi",
"li li",
"li xiao man",
"li yu cun",
"yang ni",
"xiao tong",
"li lei",
"zhang san"
运行时间限制: 无限制
内存限制: 无限制
输入: 输入一个男士姓名,字符串
输出: 输出最具“夫妻相”的女士姓名
基本思路:
找到男士女士名字里出现的字母,比如说wang yun,出现的字母为a,g,n,y,u,w.然后匹配两个名字里出现的字母重复数,如果都出现了某个字母,重复数就加1.
#include<stdio.h> #include<string.h> char nameArray[10][26]={"wang fei","zhang man yu","zhang zhi yi","li li", "li xiao man","li yu cun","yang ni","xiao tong","li lei","zhang san"}; char male[100]; bool female_cnt[10][26]; bool male_cnt[26]; void init(){ for(int i=0;i<10;++i) { for(int j=0;j<strlen(nameArray[i]);++j) { if(nameArray[i][j]!=' ') female_cnt[i][nameArray[i][j]-'a']=1; } } } int main(int argc, char *argv[]) { init(); gets(male); for(int i=0;i<strlen(male);++i) if(male[i]!=' ') male_cnt[male[i]-'a']=1; int max_index=0; int max_count=0; for(int i=0;i<10;++i) { int count=0; for(int j=0;j<26;++j) { if(male_cnt[j]&&female_cnt[i][j]) count++; } if(count>max_count) { max_index=i; max_count=count; } } printf("%s\n",nameArray[max_index]); return 0; }
华为机试—姓名的夫妻相
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。