姓名的夫妻相(C)华为机试题

// huawei test.cpp : 定义控制台应用程序的入口点。
/*题目:2014华为武汉上机试题二:姓名的夫妻相
在中国,形容夫妻恩爱的词汇中,大家用的比较多的就是“夫妻相”。所谓“夫妻相”,就是两个人看上去比较般配,长相、身材等某些方面有一定的相似度。本题则另辟蹊径,
从人的姓名维度,以字母重复个数来寻找最具“夫妻相”的人。题目中预先给定一组女士的姓名拼音。输入男士的姓名拼音(拼音中间可以有空格,字母全部小写),依预先给定
姓名拼音的先后遍历所有姓名,输出字母重复数最多的女士姓名。
规则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"
运行时间限制: 无限制 
内存限制: 无限制 
输入: 输入一个男士姓名,字符串 
输出: 输出最具“夫妻相”的女士姓名


*/
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#define NUM 20
void Restore(char letter[],char *husname) //将丈夫姓名里出现的字母(重复的只存一次)存入letter数组中
{
int i=0;
char *a;
a=husname;
bool t=1;
while((*a)!='\0')   //遍历husname
{
t=1;
i=0;
if((*a)>='a'&&(*a)<='z')
{
while(letter[i]!='\0'&&t)    //和letter比较
   {
if((*a)==letter[i])
   {
t=0;
   }
else
i++;
   }
if(t)
   {
letter[i]=*a;
   }
}
a++;
}
}
int Compare(char l[],char gl[])//比较有多少字母相同
{
int i=0;
int j=0;
int count=0;
while(gl[i]!='\0')
{
bool t=1;
j=0;
while(l[j]!='\0'&&t)
{
if(gl[i]==l[j])
{
count++;
t=0;
}
else
j++;
}
i++;
}
return count;
}
int _tmain(int argc, _TCHAR* argv[])
{
char *gname[10]={
   "wang fei",
        "zhang man yu",
        "zhang zhi yi",
        "li li",
        "li xiao man",
        "li yu cun",
        "yang ni",
        "xiao tong",
        "li lei",
        "zhang san"
};
int max=0;
int num[10];
char gletter[NUM];
char *husname=(char *)malloc(20);
char letter[NUM];
for(int i=0;i<NUM;i++)
{
letter[i]='\0';
}
gets(husname);
Restore(letter,husname);
for(int j=0;j<10;j++)
{
for(int t=0;t<NUM;t++)
gletter[t]='\0';
Restore(gletter,gname[j]);
num[j]=Compare(letter,gletter);
}
for(int k=1;k<10;k++)
{
if(num[max]<num[k])
max=k;
}
printf("%s\n",gname[max]);
system("pause");
return 0;
}


//scanf()输入字符串时遇到空格就停止;所以用gets();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值