华为上机题汇总(八)

华为上机题汇总(八)

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

目录

  • 华为上机题汇总八

    • 目录
    • 第三十六题
    • 第三十七题
    • 第三十八题
    • 第三十九题
    • 第四十题

第三十六题

36.输入一行数字:123 423 5645 875 186523

在输入第二行:23

将第一行中含有第二行中“23”的数输出并排序

结果即:123 423 186523

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

void sortAndPrint(const string &s1, const string &s2){
    vector<int> vs;
    auto begin = s1.begin();
    while (begin != s1.end())
    {
        auto ahead = begin + 1;
        while (ahead != s1.end() && *ahead != ‘ ‘)
        {
            ahead++;
        }
        string tmp(begin,ahead);
        int pos = tmp.find(s2);
        if (pos >= 0 )
        {
            vs.push_back(stoi(tmp));
        }
        if (ahead == s1.end()) break;
        begin = ++ahead;
    }

    if(!vs.size()) return;
    sort(vs.begin(),vs.end());
    for (unsigned i = 0; i < vs.size(); i++)
    {
        cout << vs[i] << " ";
    }
    cout << endl;
}

int main()
{
    string s1,s2;
    getline(cin,s1);
    getline(cin,s2);
    sortAndPrint(s1,s2);
    return 0;
}

第三十七题

将 电话号码 One Two 。。。Nine Zero

翻译成1 2 。。9 0

中间会有Double

例如输入:OneTwoThree

输出:123

输入:OneTwoDoubleTwo

输出:1222

输入:1Two2 输出:ERROR

输入:DoubleDoubleTwo 输出:ERROR

有空格,非法字符,两个Double相连,Double位于最后一个单词 都错误

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

string digit[11]={"Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Double"};

int convert(const string &s){
    for (int i = 0; i < 11; i++)
    {
        if (s == digit[i])
        {
            return i;
        }
    }
    return -1;
}

bool englishToNumber(const string &s, string &output){
    vector<int> v;
    auto begin = s.begin();
    while (begin != s.end())
    {
        auto ahead = begin + 1;
        while (ahead != s.end() && !isupper(*ahead))
        {
            ahead++;
        }
        string tmp(begin,ahead);
        if (convert(tmp) < 0) return false;
        v.push_back(convert(tmp));
        begin = ahead;
    }

    for (auto vBegin = v.begin();vBegin != v.end();vBegin++){
        if (*vBegin < 10)
        {
            output.push_back(*vBegin + ‘0‘);
            continue;
        }
        vBegin++;
        if (vBegin != v.end() && *vBegin < 10)
        {
            output.push_back(*vBegin + ‘0‘);
            output.push_back(*vBegin + ‘0‘);
            continue;
        }
        return false;
    }
    return true;
}

int main()
{
    string s, output;
    getline(cin,s);
    cout << (englishToNumber(s,output) ? output : "ERROR") << endl;
    return 0;
}

第三十八题

38.输入一个整数,如12336544,或1750,然后从最后一位开始倒过来输出,最后如果是0,则不输出,输出的数字是不带重复数字的,所以上面的输出是456321和571。如果是负数,比如输入-175,输出-571。

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

void reverseNum(const string s){
    int begin = s.find_last_not_of("0");
    int end = s[0] == ‘-‘ ? 1 : 0;
    if (end == 1) cout << ‘-‘;
    for (int i = begin; i >= end; i--)
    {
        cout << s[i];
    }
    cout << endl;
}

int main()
{
    int n;
    cin >> n;
    reverseNum(to_string(n));
    return 0;
}

第三十九题

39.输入两行字符串正整数,第一行是被减数,第二行是减数,输出第一行减去第二行的结果。

备注:1、两个整数都是正整数,被减数大于减数

示例:

输入:1000000000000001

1

输出:1000000000000000

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

void bigNumSub(const string &s1, const string &s2, string &s3){
    auto b1 = s1.rbegin(), b2 = s2.rbegin();
    int overFlow = 0;
    while (b1 != s1.rend() && b2 != s2.rend())
    {
        int sum = ((*b1++) - ‘0‘) - ((*b2++) - ‘0‘) - overFlow;
        if (sum < 0)
        {
            sum += 10;
            overFlow = 1;
            s3.push_back(sum + ‘0‘);
        }
        else
        {
            overFlow = 0;
            s3.push_back(sum + ‘0‘);
        }
    }

    while (b1 != s1.rend())
    {
        int sum = *b1++ - ‘0‘ - overFlow;
        if (sum < 0)
        {
            sum += 10;
            overFlow = 1;
            s3.push_back(sum + ‘0‘);
        }
        else
        {
            overFlow = 0;
            s3.push_back(sum + ‘0‘);
        }
    }

    s3.erase(s3.begin()+s3.find_last_not_of("0")+1,s3.end());
    reverse(s3.begin(),s3.end());
}

int main()
{
    string s1, s2, output;
    getline(cin, s1);
    getline(cin, s2);
    bigNumSub(s1,s2,output);
    cout << output << endl;
    return 0;
}

第四十题

40.编程的时候,if条件里面的“(”、“)”括号经常出现不匹配的情况导致编译不过,请编写程序检测输入一行if语句中的圆括号是否匹配正确。同时输出语句中出现的左括号和右括号数量,如if((a==1)&&(b==1))是正确的,而if((a==1))&&(b==1))是错误的。注意if语句的最外面至少有一对括号。提示:用堆栈来做。

输入:if((a==1)&&(b==1))

输出:RIGTH 3 3

输入:if((a==1))&&(b==1))

输出:WRONG 3 4

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

bool isMatch(const string &s, int &n1, int &n2){
    stack<char> stk;
    for (unsigned i = 0; i < s.size(); i++)
    {
        if (s[i] == ‘(‘)
        {
            n1++;
            stk.push(s[i]);
        }
        else if (s[i] == ‘)‘)
        {
            n2++;
            if (!stk.empty())
            {
                stk.pop();
                continue;
            }
            return false;
        }
    }
    return stk.empty();
}

int main()
{
    string s;
    getline(cin, s);
    int num1 = 0, num2 = 0;
    cout << (isMatch(s,num1,num2) ? "RIGHT " : "WRONG ") << num1 << " " << num2 << endl;
    return 0;
}
时间: 2024-10-21 19:45:35

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

华为上机题汇总(十八)

华为上机题汇总(十八) 注:编译环境为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,答案仅供参考. 目录 华为上机题汇总六 目录 第二十六题 第二十七题 第二十八题 第二十九题 第三十题 第二十六题 26.一副牌中发五张扑克牌给你:让你判断数字的组成: 有以下几种情况: 1:四条:即四张一样数值的牌(牌均不论花色)2:三条带 一对 3:三条带两张不相同数值的牌 4:两对 5:顺子 包括 10,J,Q,K,A 6:什么都不是 7:只有一对 #include <iostream> #include <

华为上机题汇总(二)

华为上机题汇总(二) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总二 目录 第六题 第七题 第八题 第九题 第十题 第六题 6.比较一个数组的元素 是否为回文数组(如abcdcba,hjjh) #include <iostream> #include <vector> #include <string> using namespace std; bool isPalindrome(const string &str){

华为上机题汇总(十四)

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

华为上机题汇总(十)

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

华为上机题汇总(四)

华为上机题汇总(四) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总四 目录 第十六题 第十七题 第十八题 第十九题 第二十题 第十六题 16.将一个字符串的元音字母复制到另一个字符串,并排序(30分) 问题描述: 有一字符串,里面可能包含英文字母(大写.小写).数字.特殊字符,现在需要实现一函数,将此字符串中的元音字母挑选出来,存入另一个字符串中,并对字符串中的字母进行从小到大的排序(小写的元音字母在前,大写的元音字母在后,依次有序). 说明: 1.

华为上机题汇总(二十)

华为上机题汇总(二十) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总二十 目录 第九十六题 第九十七题 第九十八题 第九十九题 第一百题 第九十六题 96 . 给分数的循环节加括号 两个整数相除,将结果用字符串返回.如果是循环小数,将循环的位用括号括起来. 输入:1 3 输出:0.(3) 输入 1 7 输出 0.(142857) #include <iostream> #include <string> using namespace s

华为上机题汇总(十二)

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

华为上机题汇总(十六)

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