华为2019秋招笔试软件题题解

一共三道编程题,第一题100分,第二题200分,第三题300分。时间为2h。
第一题:挑选便宜的厂商,厂商1:大于等于3件打3折,实付大于50免运费10元 。厂商2:满十元就减两元,实付大于99免运费6元,输入件数和单价,计算哪家厂商更便宜(四舍五入,精确到分)。
#include <bits/stdc++.h>
using namespace std;
int main(){
    int n;
   double price;
    while(cin>>n>>price)
    {   
        double s1, s2;
        if (n >= 3)
            s1 = (n)*price*0.7+10;
        else
            s1 = n*price+10;
        s1 = s1 > 50 ? s1 - 10 : s1;
        s2 = n*price - n*price / 10 * 2+6;
        s2 = s2 > 99 ? s2 - 6 : s2;
        s1 = (int)(s1 * 100 + 0.5) / 100.0;
        s2 = (int)(s2 * 100 + 0.5) / 100.0;
        cout << s1 <<"fd" <<s2 << endl;
        if (s1 > s2)
            cout << 2 << endl;
        else if (s1 < s2)
            cout << 1 << endl;
        else if (s1 == s2)
            cout << 0 << endl;
    }
    return 0;
}
第二题:给定一个包含 '('')' 的字符串,找出最长的包含有效括号的子串的长度。(需要注意对于非法字符的处理,如"(a)",返回0,“(())a()”,返回4)
#include <bits/stdc++.h>
using namespace std;

int main(){
    string str;
    while (getline(cin, str))
    {             stack<int> s0;
        int max = 0, last = -1;
        for (int i = 0; i < str.size(); i++)
        {
            if (str[i] != '('&&str[i] != ')')
            {
                while (!s0.empty()) s0.pop();
            }
            else if (str[i] == '(')
                s0.push(i);
            else
            {
                if (s0.empty()) last = i;
                else
                {
                    s0.pop();
                    if (s0.empty()) 
                        max = max >= i - last ? max : i - last;
                    else max = max >= i - s0.top() ? max : i - s0.top();
                }
            }
        }
        cout << max << endl;
    }
    return 0;
}

第三题:输入DNA序列,返回最长的重复DNA序列片段(此题c++时间要求不超过5s,我直接遍历了)
#include <bits/stdc++.h>
using namespace std;
int main(){
    string str;
    while (cin >> str)
    {
        int maxlen = 0, start;
        int  curlen = 0, p, q;
        for (int i = 0; i < str.size(); i++)
        {
            for (int j = i + 1; j < str.size() - i; j++)
            {
                p = i; q = j;
                curlen = 0;
                while (str[p] == str[q] && q<str.size())
                {
                    curlen++; p++; q++;
                }
                if (curlen>maxlen)
                {
                    maxlen = curlen;
                    start = i;
                }
            }
        }
        for (int i = start; i < start + maxlen; i++)
            cout << str[i];
        cout << " " << maxlen << endl;
    }
    return 0;
}

#秋招##题解##华为#
全部评论
//谢谢各位大佬点赞,只求一件卫衣,祝各位点赞的哥哥姐姐们都能拿到称心如意的offer
点赞 回复 分享
发布于 2018-08-23 18:29
助力一波
点赞 回复 分享
发布于 2018-09-11 22:47
第二题,如果输入abc(),结果是不是应该是2
点赞 回复 分享
发布于 2018-09-26 10:53

相关推荐

11-15 17:19
湖南大学 Java
成果成果成果果:这是哪个公司的hr,这么离谱吗,我没见过用性别卡技术岗的,身边女性同学拿大厂offer的比比皆是
点赞 评论 收藏
分享
巧克力1:双选会不如教室宣讲会
点赞 评论 收藏
分享
评论
44
39
分享
牛客网
牛客企业服务