华为笔试题(2019.4.3)

【编程题】
1.(100分)多个数组合并为一个数组(输入输出均以逗号隔开)
(通过100%)
#include <iostream>
#include <vector>
#include <stdio.h>
#include <string>
using namespace std;

int test100()
{     int len;     cin >> len;     vector<string> allstr;     string strtemp;     int i, j, temp;     while (cin >> strtemp)     {         allstr.push_back(strtemp);     }     long long sumlen=0;     for (i = 0; i < allstr.size(); i++)     {         sumlen += allstr[i].length();     }     string result;     int num = 0;     int l = 0;     while (sumlen)     {         for (i = 0; i < allstr.size(); i++)         {             if (allstr[i].length() != 0)             {                 l = 0;                 num = 0;                 for (j = 0; j < allstr[i].length();j++)                 {                     l++;                     if (allstr[i][j] == ',')                         num++;                     if (num == len)                         break;                 }                 if (num==len)                 {                     result += allstr[i].substr(0, l);                     allstr[i] = allstr[i].erase(0, l);                 }                 else                 {                     result += allstr[i];                     result += ',';                     allstr[i].erase(0);                 }             }         }         sumlen = 0;         for (i = 0; i < allstr.size(); i++)         {             sumlen += allstr[i].length();         }     }       result.erase(result.length()-1);     cout << result << endl;     return 0;
}
2.(200)字符串数组的处理,合法非法
(时间不够没敲完)
#include <iostream>
#include <vector>
#include <set>
#include <stdio.h>
#include <string>
#include <algorithm>
using namespace std;

int mycmp(string a,string b)
{
    int la, lb;
    la = a.length();
    lb = b.length();
    int i, j;
    if (la==lb)
    {
        for (i = 0; i < la;i++)
        {
            if (a[i]!=b[i])
            {
                return a[i] < b[i];
            }
        }
    }
    if (la < lb)
    {
        for (i = 0; i < la; i++)
        {
            if (a[i] != b[i])
            {
                return a[i] < b[i];
            }
        }
        return 1;
    }
    if (la > lb)
    {
        for (i = 0; i < lb; i++)
        {
            if (a[i] != b[i])
            {
                return a[i] < b[i];
            }
        }
        return 1;
    }
}
int test200()
{
    vector<string> allstr;
    vector<string> falsestr,truestr2;
    set<string> truestr;
    string strtemp;
    while (cin >> strtemp)
    {
        allstr.push_back(strtemp);
    }

    int i, j,count;
    for (i = 0; i < allstr.size();i++)
    {
        count = 0;
        for (j = 0; j < allstr[i].length();j++)
        {
            if ((allstr[i][j] >= '0'&&allstr[i][j] <= '9') || (allstr[i][j] >= 'a'&&allstr[i][j] <= 'z') || (allstr[i][j] >= 'A'&&allstr[i][j] <= 'Z'))
            {
                count++;
            }        
        }
        if (count == allstr[i].length())//合法
        {
            truestr.insert(allstr[i]);
        }
        else//非法
        {
            falsestr.push_back(allstr[i]);
        }
    }
    //set转vector
    for (auto p = truestr.begin(); p != truestr.end(); p++)
    {
        truestr2.push_back(*p);
    }
    //输出
    for (i = 0; i < truestr2.size(); i++)
    {
        cout << truestr2[i] << ' ';
    }
    cout << endl;
    //输出
    for (i = 0; i < falsestr.size();i++)
    {
        cout << falsestr[i] << ' ';
    }
    cout << endl;
    //移位
    int n = 10;
    string temp;
    for (i = 0; i < truestr2.size(); i++)
    {
        for (j = 0; j < n;j++)
        {
            temp = truestr2[i][0];
            truestr2[i].erase(0, 1);
            truestr2[i] += temp;
        }
    }
    //输出
    for (i = 0; i < truestr2.size(); i++)
    {
        cout << truestr2[i] << ' ';
    }
    cout << endl;
    //排序
    sort(truestr2.begin(), truestr2.end(),mycmp);
    //输出
    for (i = 0; i < truestr2.size(); i++)
    {
        cout << truestr2[i] << ' ';
    }
    return 0;
}
3.(300)null

#华为##笔试题目##题解##春招##笔经#
全部评论
请问第一道题的输入为何cin>>len不需要while循环呢? 我一开始也是这么写的,但是提交的时候显示无法通过
点赞 回复
分享
发布于 2019-04-03 23:12
只用输入一个数,不需要循环啊。这一题通过率100%
点赞 回复
分享
发布于 2019-04-03 23:15
博乐游戏
校招火热招聘中
官网直投
第一题在输入输出上耽搁了好久😂
点赞 回复
分享
发布于 2019-04-03 23:46
第一题输入行数未知的数组,while(cin>>strtemp)怎么停下来的
点赞 回复
分享
发布于 2019-04-04 00:44
第一题有用java通过的嘛??
点赞 回复
分享
发布于 2019-04-04 01:01
我写了一个小时第一题理解的不对,然后写出来了第二题,然后第一题还是没整出来,第三题挺好玩看着就想笑,咖啡杯放多久可以不用刷呢哈哈哈哈哈哈。
点赞 回复
分享
发布于 2019-04-04 01:42
第一题的while输入循环怎么停下来?
点赞 回复
分享
发布于 2019-04-04 10:24
第三题谁还记得吗?
点赞 回复
分享
发布于 2019-04-04 10:39
无序的多个string进set后, 再转换成vector,可以达到去重的效果,但是进入set后是有序排列了,转到vector后就是有序排列的string 了,string之间的顺序会不会被打乱了呢?
点赞 回复
分享
发布于 2019-04-04 19:56
error C2668: 'erase' : ambiguous call to overloaded function,第一题出现这个错误是什么意思呢
点赞 回复
分享
发布于 2019-04-04 21:23
输出部分这么写的 为什么不行呢     int  a;     vector<vector <int> > table;     while(cin>>a)     {         if(a==',') cin>>a;         table[j].push_back(a);         while(cin>>a)         {             if(a==',') cin>>a;             table[j].push_back(a);         }         j++;     }
点赞 回复
分享
发布于 2019-04-04 21:24
有用python写出来的吗
点赞 回复
分享
发布于 2019-04-08 01:35
其实第二个考的是algorithm中的rotate,cytpe中的合法,至于排序也没必要写成那样,把字符串放到vector,直接sort(vec.begin(),vec.end());默认按照字典序的内容就输出来了。
点赞 回复
分享
发布于 2019-04-10 11:25

相关推荐

5 67 评论
分享
牛客网
牛客企业服务