[华为机试真题]69.姓名的夫妻相

简介:

题目

在中国,形容夫妻恩爱的词汇中,大家用的比较多的就是“夫妻相”。所谓“夫妻相”,就是两个人看上去比较般配,长相、身材等某些方面有一定的相似度。
本题则另辟蹊径,从人的姓名维度,以字母重复个数来寻找最具“夫妻相”的人。
题目中预先给定一组女士的姓名拼音。输入男士的姓名拼音(拼音中间可以有空格,字母全部小写),依预先给定姓名拼音的先后遍历所有姓名,输出字母重复数最多的女士姓名。

规则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"

运行时间限制:

无限制 

内存限制:

无限制 

输入:

输入一个男士姓名,字符串 

输出:

输出最具“夫妻相”的女士姓名

代码

/*---------------------------------------
*   日期:2015-07-07
*   作者:SJF0115
*   题目:姓名的夫妻相
*   来源:华为机试真题
-----------------------------------------*/
#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;

#define GirlSize 10

string girlName[GirlSize+1] = {"wang fei","zhang man yu","zhang zhi yi","li li","li xiao man","li yu cun","yang ni","xiao tong","li lei","zhang san"};

vector<vector<int> > hash(GirlSize,vector<int>(26,0));

// 预处理女士姓名
void Init(){
    for(int i = 0;i < GirlSize;++i){
        int count = girlName[i].size();
        for(int j = 0;j < count;++j){
            if(girlName[i][j] != ' '){
                ++hash[i][girlName[i][j] - 'a'];
            }//if
        }//for
    }//for
}

string MaxDupicate(string name){
    int size = name.size();
    // 去掉重复字符
    vector<int> boyHash(26,0);
    for(int k = 0;k < size;++k){
        if(name[k] != ' '){
            ++boyHash[name[k] - 'a'];
        }//if
    }//for
    int count = 0;
    int max = 0;
    // 记录重复数最多的女孩下标
    int index = 0;
    // 比较 获取重复数
    for(int i = 0;i < GirlSize;++i){
        count = 0;
        for(int j = 0;j < 26;++j){
            if(hash[i][j] > 0 && boyHash[j] > 0){
                ++count;
            }//if
        }//for
        // 更新最大值
        if(max < count){
            max = count;
            index = i;
        }//if
    }//for
    return girlName[index];
}

int main(){
    string name;
    //freopen("C:\\Users\\Administrator\\Desktop\\acm.txt","r",stdin);
    // 预处理
    Init();
    while(getline(cin,name)){
        cout<<MaxDupicate(name)<<endl;
    }//while
    return 0;
}
目录
相关文章
|
C语言 C++
PTA团体程序设计天梯赛-练习集: L1-050 倒数第N个字符串 ( 15分 )
给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。 输入格式: 输入在一行中给出两个正整数 L(2 ≤ L ≤ 6)和 N(≤105)。 输出格式: 在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。 输入样例:
185 0
|
测试技术 C语言 C++
PTA团体程序设计天梯赛-练习集:L1-003 个位数统计
给定一个 k 位整数 N=dk−110k−1+⋯+d1101+d0 (0≤di≤9, i=0,⋯,k−1, dk−1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。 输入格式: 每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。 输出格式: 对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。
227 0
|
机器学习/深度学习 人工智能 程序员
2023年 团体程序设计天梯赛个人感悟及总结(附题解)——遗憾国三
⭐L1一阶题 ⭐L1-089 最好的文档 (5分)—水题 👉👉👉👉👉👉L1-089 最好的文档👈👈👈👈👈👈 有一位软件工程师说过一句很有道理的话:“Good code is its own best documentation.”(好代码本身就是最好的文档)。本题就请你直接在屏幕上输出这句话。 输入格式: 本题没有输入。 输出格式: 在一行中输出 Good code is its own best documentation.。 输入样例: 无 输出样例: Good code is its own best documentation.
812 0
|
算法
【蓝桥杯集训·每日一题】AcWing 3768. 字符串删减
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 双指针
91 0
|
C++
蓝桥杯练习题一 - 生日蜡烛(c++)
蓝桥杯练习题一 - 生日蜡烛(c++)
170 0
|
存储 算法 调度
【CCCC】PAT : 团体程序设计天梯赛-练习集 L2 答案,题解,附代码
【CCCC】PAT : 团体程序设计天梯赛-练习集 L2 答案,题解,附代码
416 0
|
安全
【2021团体程序设计天梯赛】L2部分(PTA,L2-037到L2-040)题解代码
【2021团体程序设计天梯赛】L2部分(PTA,L2-037到L2-040)题解代码
319 0
|
机器人 C语言
【2021团体程序设计天梯赛】L1部分(PTA,L1-073到L1-080)题解代码
【2021团体程序设计天梯赛】L1部分(PTA,L1-073到L1-080)题解代码
326 0
【2020团体程序设计天梯赛】L1部分(PTA,L1-065到L1-072)题解代码
【2020团体程序设计天梯赛】L1部分(PTA,L1-065到L1-072)题解代码
258 0
【2020团体程序设计天梯赛】L2部分(PTA,L2-033到L2-036)题解代码
【2020团体程序设计天梯赛】L2部分(PTA,L2-033到L2-036)题解代码
382 0