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

一星题

加密

怎么写都只能通过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;
}

二星题

密码排列

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 各校历年复试机试试题 清华、北大、华科试题详细笔记部分,少笔记部分与少数leetcode【含个人整理笔记】 一、详...
    医学工程与科学园地阅读 4,965评论 0 1
  • 一、Java基础1、String类为什么是final的,运行速度,或者说是执行速度,在这方面运行速度快慢为:Str...
    取名废同学阅读 4,507评论 0 0
  • 题目描述计算字符串最后一个单词的长度,单词以空格隔开。输入描述:一行字符串,非空,长度小于5000。输出描述:整数...
    马淑阅读 11,725评论 0 0
  • 1.题目大意 给定一个正整数数组,最大为100个成员,从第一个成员开始,走到数组最后一个成员最少的步骤数。第一步必...
    Codeapes阅读 6,965评论 0 0
  • 今日内容大纲 。 pycharm的安装及简单使用 。 格式化输出 。 while循环 。运算符(and or no...
    whykm阅读 845评论 0 0