美文网首页
华为od机试凉经 2021-04-02

华为od机试凉经 2021-04-02

作者: 寽虎非虫003 | 来源:发表于2021-04-03 01:37 被阅读0次

一星题

加密

怎么写都只能通过20%的用例,也不知道是我理解错了,还是速度上不去。

题的大意是:第一行输入一个数字告诉你有多少行字符串需要加密,每行字符串不超过50个字符,输入和输出的字符串均是小写字母。

#include <string>
using namespace std;

int main()
{
    int n;
    string s;

    int a[50] = { 1,2,4 };

    for (unsigned char i = 3; i < 50; i++)
    {
        a[i] = a[i - 1] + a[i - 2] + a[i - 3];
        a[i] = a[i]%24;
    }

    cin >> n;

    while (n--)
    {
        cin >> s;

        for (size_t i = 0; i < s.size(); i++)
        {
            s[i] += a[i]%24;

            if (s[i] > 'z')
            {
                s[i] = s[i] - 'z' + 'a' - 1;
            }
        }

        cout << s << endl;
    }

    return 0;
}

终点可达

原题大意是:一串数字,从第一个开始走,需要几步能够达到最后一个数,返回步数,或者是不能达到,返回-1;第一步的步长最大为len/2,后面每一步的步长都是它当前所在位置的数字的大小。
我搞不定输入输出,也没做出来。胡乱写的如下:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int find(vector<int> &vn, int goal, int maxFirst);
int findMin(vector<int> &vn);

int main()
{
    int n;
    int goal(0);
    int ret(-1);
    int maxFirst;
    vector<int> vn;

    while (cin>>n)
    {
        vn.push_back(n);
    }

    goal = vn.size() - 1;
    maxFirst = vn.size() / 2;

    ret = find(vn, goal, maxFirst);

    cout << ret<<endl;


    return 0;
}

int find(vector<int> &vn, int goal, int maxFirst)
{
    int ret(-1);
    vector<int> vns;
    for (int i = goal; i >= 0; i--)
    {
        if (i == 0)
        {
            i + maxFirst >= goal;
            return 1;
        }
        else if (i + vn[i] == goal)
        {
            // 这个if里面只有单次能成功的,没有比较,这样得不到最优的
            ret = find(vn, i, maxFirst);
            if (ret != -1)
            {
                vns.push_back(ret + 1);
            }
        }
    }

    if (vns.size() == 0)
    {
        return -1;
    }
    else
    {
        return findMin(vns);
    }
    return 0;
}

int findMin(vector<int> &vn)
{
    int ret(0);

    for (size_t i = 0; i < vn.size(); i++)
    {
        ret = min(vn[i], ret);
    }

    return ret;
}

二星题

密码排列

原题大意:给你一堆可能的数字,以及密码的最少位数,要求你写出所有可能的密码组合,且不同的组合间按前面位的数字由小到大输出,每行只输出一个密码。

我一看,同样搞不定输入输出,直接交白卷了。

相关文章

  • 华为od机试凉经 2021-04-02

    一星题 加密 怎么写都只能通过20%的用例,也不知道是我理解错了,还是速度上不去。 题的大意是:第一行输入一个数字...

  • 华为OD机试 :找终点

    1.题目大意 给定一个正整数数组,最大为100个成员,从第一个成员开始,走到数组最后一个成员最少的步骤数。第一步必...

  • 华为OD机试-磁盘容量排序

    今天参加华为OD机试,总共有两道机试题,每道题200分,总共400分,华为那边要求是两道题全过。第一道题是磁盘容量...

  • 华为OD机试,压缩报文还原

    ?题目描述 为了提升数据传输的效率,会对传输的报文进行压缩处理。 输入一个压缩后的报文,请返回它解压后的原始报文。...

  • 华为机试2017

    简易压缩算法:将全部由小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为整个连续个数加该字母,其他部...

  • 实习机试-华为

    昨晚收到面试邀请后就开始临阵磨枪,加上今天总共在剑指offer上刷了十几道题吧。晚上参加华为的机试,2个小时3个题...

  • 【华为机试】质数因子

    题目描述: 功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子 输入描述: 输入一个long型整数 输...

  • 【华为机试】进制转换

    题目描述: 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 ) 输入描述: ...

  • 【华为机试】数字颠倒

    题目描述: 输入一个整数,将这个整数以字符串的形式逆序输出。程序不考虑负数的情况,若数字含有0,则逆序形式也含有0...

  • 【华为机试】句子逆序

    题目描述: 将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”...

网友评论

      本文标题:华为od机试凉经 2021-04-02

      本文链接:https://www.haomeiwen.com/subject/gjuckltx.html