美文网首页
实习机试-华为

实习机试-华为

作者: Incredibles | 来源:发表于2020-04-29 23:34 被阅读0次

昨晚收到面试邀请后就开始临阵磨枪,加上今天总共在剑指offer上刷了十几道题吧。
晚上参加华为的机试,2个小时3个题。最后一个是图的,直接放弃了,还没复习到。
成绩上第一个题通过了90%的用例,另外的10%实在没测出来,考试模式也不会给你看什么用例没有通过,只有比例。
第二题只过了30%,后来想出来第二题的问题所在了,遗憾的是时间到了。
前两个都是字符串处理的,难度怎么说呢,过程比较复杂,需要花点时间。
另外今晚的题有点很坑的地方在于要自己控制输入输出,我在第二题时忘了getline是怎么用的了,大概耽误了十几分钟才试出来,有点遗憾。
第一题:
输入一串字符,没有空格,字符数量小于8.
求这些字符可以组成多少种不同的字符串排列。
我的求解:

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

int main()
{
    vector<char> input_data = { 'a', 'b', 'a', 'c'};
    string tmp;
    int num[256] = { 0 };
    char c;

    /*while (cin >> c)
        input_data.push_back(c);*/

    if (input_data.size() == 0) {
        cout << 0;
        return 0;
    }
    // 统计重复字符的数量
    for (auto iter = input_data.begin(); iter != input_data.end(); iter++)
    {
        if (tmp.find(*iter) == string::npos) {
            tmp += *iter;
            num[*iter]++;
        }
        else
            num[*iter]++;
    }
    // 排列组合的分子项
    int res1 = 1, tmp1 = input_data.size();
    while (tmp1 > 0)
    {
        res1 *= tmp1;
        tmp1--;
    }
    // 排列组合的分母项
    int res2 = 1;
    for (auto iter = tmp.begin(); iter != tmp.end(); iter++)
    {
        while (num[*iter] > 0) {
            res2 *= num[*iter];
            num[*iter]--;
        }
    }
    cout << res1 / res2 << endl;
    system("pause");
    return 0;
}

感觉还可以再优化一下,res2 的值可以在统计阶段就算出来。

for (auto iter = input_data.begin(); iter != input_data.end(); iter++)
    {
        if (tmp.find(*iter) == string::npos) {
            tmp += *iter;
            num[*iter]++;
        }
        else
        {
            num[*iter]++;
            res2 *= num[*iter];
        }           
    }

第二题:
第一行输入一串字符,无空格。第二行输入一个数k,k小于字符串长度。从字符串中删除k个字符使字典序最小。
这个题明天再写,现在脑壳有些痛,要睡觉了。

相关文章

  • 实习机试-华为

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

  • 华为机试2017

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

  • 【华为机试】质数因子

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

  • 【华为机试】进制转换

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

  • 【华为机试】数字颠倒

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

  • 【华为机试】句子逆序

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

  • 【华为机试】字符逆序

    题目描述: 将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。 如:输入“I am a s...

  • 【华为机试】简单密码

    题目描述: 密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上...

  • 【华为机试】简单密码

    题目描述题目太长不copy了。字符串转换规则。大写字母转为下一个字母的小写格式。如:'A' -> 'b' 、'B'...

  • 华为机试的经历

    最近面试华为的16-17级,对标阿里的级别的p6,p6+.以前的工作经历比较单纯,2.5-3年,面试高级工程师,或...

网友评论

      本文标题:实习机试-华为

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