华为上机题汇总(二十)

华为上机题汇总(二十)

注:编译环境为Visual Studio 2012,答案仅供参考。

目录

  • 华为上机题汇总二十

    • 目录
    • 第九十六题
    • 第九十七题
    • 第九十八题
    • 第九十九题
    • 第一百题

第九十六题

96 . 给分数的循环节加括号

两个整数相除,将结果用字符串返回。如果是循环小数,将循环的位用括号括起来。

输入:1 3

输出:0.(3)

输入 1 7

输出 0.(142857)

#include <iostream>
#include <string>
using namespace std;

void div(int a, int b, string &result){
    if (!b) return;
    int c = a / b;
    a %= b;

    result = to_string(c);
    if (!a) return;
    result.push_back(‘.‘);
    string tmp;
    bool flag = 0;
    while (a)
    {
        a *= 10;
        c = a / b;
        a %= b ;
        int pos = tmp.find(c +‘0‘);
        if (pos >= 0)
        {
            flag = 0;
            int tmp_a = a, tmp_b = b, tmp_c;
            string s;
            for (unsigned i = pos + 1; i < tmp.size(); i++)
            {
                tmp_a *= 10;
                tmp_c = tmp_a / tmp_b;
                tmp_a %= tmp_b;
                s.push_back(tmp_c);
                if (tmp[i] != tmp_c + ‘0‘)
                {
                    flag = 1;
                    break;
                }
            }
            if (!flag)
            {
                result += string(tmp.begin(),tmp.begin()+pos);
                result.push_back(‘(‘);
                result += string(tmp.begin()+pos,tmp.end());
                result.push_back(‘)‘);
                return;
            }
        }
        tmp.push_back(c + ‘0‘);
    }
    result += tmp;
}

int main()
{
    int a, b;
    string s;
    cin >> a >> b;
    div(a,b,s);
    cout << s << endl;
    return 0;
}

第九十七题

97.任何一个正整数m立方可写成m个连续奇数之和,m(0-100)

输入:6

输出:32+33+35+37+39+41

#include <iostream>
#include <vector>
using namespace std;

void convert(int m, vector<int> &result){
    int tmp = m * m;
    for (int i = tmp - m + 1; i < tmp + m; i += 2)
    {
        result.push_back(i);
    }
}

int main()
{
    int m;
    vector<int> result;
    cin >> m;
    convert(m,result);
    for (unsigned i = 0; i < result.size(); i++)
    {
        cout << result[i];
        if (i != result.size()-1) cout << "+";
    }
    cout << endl;
    return 0;
}

第九十八题

98.变形的杨辉三角形

            1
         1  1  1
      1  2  3  2  1
    1 3  6  7  6  3  1
  1 4 10 16 19 16 10 4 1

每个数是上行,左右3个数之和,不存在为0,求第n行第一个偶数出现的位置,没有输出-1

#include <iostream>
#include <vector>
using namespace std;

int findEven(int n){
    int m = 2*n-1;
    vector<int> tmp(m,0);
    vector<vector<int> > v(n,tmp);
    v[0][n-1] = 1;
    for (int i = 1; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            v[i][j] = v[i-1][j];
            if (j > 0) v[i][j] += v[i-1][j-1];
            if (j < m-1) v[i][j] += v[i-1][j+1];
        }
    }
    for (int i = 0; i < m; i++)
    {
        if (v[n-1][i] % 2 == 0)
        {
            return i + 1;
        }
    }
    return -1;
}

int main()
{
    int n;
    cin >> n;
    cout << findEven(n) << endl;
    return 0;
}

第九十九题

99.描述:有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙。下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS。如果单词中包含有重复的字母,只保留第1个,其余几个丢弃。现在,修改过的那个单词死于字母表的下面,如下所示:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

T R A I L B Z E S C D F G H J K M N O P Q U V W X Y

上面其他用字母表中剩余的字母填充完整。在对信息进行加密时,信息中的每个字母被固定于顶上那行,并用下面那行的对应字母一一取代原文的字母(字母字符的大小写状态应该保留)。因此,使用这个密匙,Attack AT DAWN(黎明时攻击)就会被加密为Tpptad TP ITVH。请实现下述接口,通过指定的密匙和明文得到密文。详细描述:接口说明:

输入:先输入key和要加密的字符串

输出:返回加密后的字符串

样例输入:

nihao

ni

样例输出: le

#include <iostream>
#include <string>
using namespace std;

bool isInStr(const string &s, char c){
    for (unsigned i = 0; i < s.size(); i++)
    {
        if (toupper(c) == s[i])
        {
            return true;
        }
    }
    return false;
}

char convert(char c, const string &kt){
    int flag = isupper(c);
    c = toupper(c);
    char ck = kt[c - ‘A‘];
    return flag ? ck : ck + ‘a‘ - ‘A‘;
}

void code(const string &key, const string &s, string &result){
    string kt;
    for (unsigned i = 0; i < key.size(); i++)
    {
        if (!isalpha(key[i])) continue;
        if (!isInStr(kt,key[i]))
        {
            kt.push_back(toupper(key[i]));
        }
    }
    for (char c = ‘A‘; c <= ‘Z‘; ++c){
        if (!isInStr(kt,c))
        {
            kt.push_back(c);
        }
    }
    for (unsigned i = 0; i < s.size(); i++)
    {
        if (isalpha(s[i]))
        {
            result.push_back(convert(s[i],kt));
        }
        else
        {
            result.push_back(s[i]);
        }
    }
}

int main()
{
    string key,input,result;
    getline(cin,key);
    getline(cin,input);
    code(key,input,result);
    cout << result << endl;
    return 0;
}

第一百题

100.名字的漂亮度=26*字母个数最多的+25*字母个数其次的+24*字母个数再其次的(忽略大小写)

整数N,字符串个数

N个字符串

输出N个字符串漂亮度

注:这道题题意不明确,没有说是乘以字母还是字母个数,如果乘字母的话是乘字符本身(大写还是小写),还是字符在字母表中的顺位,所以这里就按字母个数来处理

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;

int pretty(const string &s){
    vector<int> v(26,0);
    for (unsigned i = 0; i < s.size(); i++)
    {
        if (isalpha(s[i]))
        {
            v[toupper(s[i]) - ‘A‘]++;
        }
    }
    sort(v.begin(),v.end(),greater<int>());
    int sum = 0;
    for (int i = 0; i < 3; i++)
    {
        sum += (26-i)*v[i];
    }
    return sum;
}

int main()
{
    int n;
    string s;
    cin >> n;
    cin.get();
    while (n--)
    {
        getline(cin,s);
        cout << pretty(s) << endl;
    }
    return 0;
}
时间: 2024-12-22 22:21:27

华为上机题汇总(二十)的相关文章

华为上机题汇总(十二)

华为上机题汇总(十二) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十二 目录 第五十六题 第五十七题 第五十八题 第五十九题 第六十题 第五十六题 56.在中国,形容夫妻恩爱的词汇中,大家用的比较多的就是"夫妻相".所谓"夫妻相",就是两个人看上去比较般配,长相.身材等某些方面有一定的相似度.本题则另辟蹊径,从人的姓名维度,以字母重复个数来寻找最具"夫妻相"的人. 题目中预先给定一组女士的姓名拼音.输

华为上机题汇总(十九)

华为上机题汇总(十九) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十九 目录 第九十一题 第九十二题 第九十三题 第九十四题 第九十五题 第九十一题 91.按照指定规则对输入的字符串进行处理. 详细描述: 将输入的两个字符串合并. 对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序.这里的下标意思是字符在字符串中的位置. 对排训后的字符串进行操作,如果字符为'0'--'9'或者'A'--'F'或者'a'--'f',则

华为上机题汇总(十五)

华为上机题汇总(十五) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十五 目录 第七十一题 第七十二题 第七十三题 第七十四题 第七十五题 第七十一题 71.渡口问题: 同类车辆先来先上,客车优于货车,客车上了4辆后才可以上货车,客车不足4辆可用货车补充. 客车为0,货车为1 输入:5 00101 输出:01324 #include <iostream> #include <queue> #include <vector> u

华为上机题汇总(十四)

华为上机题汇总(十四) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十四 目录 第六十六题 第六十七题 第六十八题 第六十九题 第七十题 第六十六题 66.问题描述 股票是一种有价证券,是股份公司为筹集资金发给投资者作为公司资本部分所有权的凭证,成为股东以此获得股息(股利),并分享公司成长或交易市场波动带来的利润:但也要共同承担公司运作错误所带来的风险.南邮华为俱乐部会长小郑同学最近计划进入股市淘金,看中一支股票,借本次华为赛机会,请你帮忙指出:何时买

华为上机题汇总(十)

华为上机题汇总(十) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十 目录 第四十六题 第四十七题 第四十八题 第四十九题 第五十题 第四十六题 46.在给定字符串中找出单词( "单词"由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格.问号.数字等等:另外单个字母不算单词):找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中:如果某个单词重复出现多次,则只输出一次:如

华为上机题汇总(十八)

华为上机题汇总(十八) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十八 目录 第八十六题 第八十七题 第八十八题 第八十九题 第九十题 第八十六题 86.合并输入的两个整形数组并去掉重复的数字按升序输出: 案例输入:3 1 2 5 -10 3 2 案例输出:-10 1 2 3 5 #include <iostream> #include <vector> #include <algorithm> using namespac

华为上机题汇总(十六)

华为上机题汇总(十六) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十六 目录 第七十六题 第七十七题 第七十八题 第七十九题 第八十题 第七十六题 消除类游戏很多,一般横.竖.斜有连续三个及以上相同就可以消除,为降低难度,本题只需要考虑一维的横消除即可, 即在给定的一组数字中(个,用例保证只有个),如果有连续三个及以上的数字相同,则将这些数字消除, 同时如果前一次消除后导致后面连在一起的也有三个及以上的数字相同,需继续消除,最终输出不能消除的剩余的数

华为上机题汇总(二十二)

华为上机题汇总(二十二) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总二十二 目录 第一百零六题 第一百零七题 第一百零八题 第一百零九题 第一百一十题 第一百一十一题 第一百零六题 106.去饭店吃饭 一个男人3元 一个女人2元 一个小孩1元 现输入总人数和总花费 #include <iostream> #include <vector> using namespace std; void display(const vector<

华为上机题汇总(二十一)

华为上机题汇总(二十) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总二十 目录 第一百零一题 第一百零二题 第一百零三题 第一百零四题 第一百零五题 第一百零一题 101.合唱队问题 问题描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2-,K,他们的身高分别为T1,T2,-,TK, 则他们的身高满足T1<-Ti+1>->TK(1<