华为上机题汇总(九)

来源:互联网 发布:网络直播受众群体 编辑:程序博客网 时间:2024/05/16 15:59

华为上机题汇总(九)

注:编译环境为Visual Studio 2012,答案仅供参考。

目录

  • 华为上机题汇总九
    • 目录
    • 第四十一题
    • 第四十二题
    • 第四十三题
    • 第四十四题
    • 第四十五题

第四十一题

41.输入m个字符串 和一个整数n, 把字符串M化成以N为单位的段,不足的位数用0补齐。
如 n=8 m=9 ,
123456789划分为:12345678
90000000
123化为 :12300000

#include <iostream>#include <string>using namespace std;int main(){    string s;    getline(cin,s);    int n;    cin >> n;    for (unsigned i = 0; i < s.size(); i++)    {        cout << s[i];        if ((i+1) % n == 0) cout << " ";    }    int residual = s.size() % n;    if (!residual)    {        cout << endl;        return 0;    }     for (int i = 0; i < n - residual; i++)    {        cout << "0";    }    cout << endl;    return 0;}

第四十二题

42.整数化为2进制数,32位长度。然后逆序输出

#include <iostream>#include <vector>using namespace std;int main(){    int n;    cin >> n;    vector<int> v(32,0);    int i = 31;    while (n != 0)    {        v[i--] = n % 2;        n /= 2;    }    for (auto b = v.rbegin();b != v.rend();++b){        cout << *b;    }    cout << endl;    return 0;}

第四十三题

43.0-1背包问题
给定一个数,比如20
然后 再给定几个数字 1 3 5 7 8
1 3 5 7 8
0 0 1 1 1
因为5+7+8=20

#include <iostream>#include <vector>using namespace std;bool find(int value, int n, const vector<int> &v, vector<bool> &flags){    if (value == 0)    {        return true;    }    if ((value > 0 && n <= 0) || value < 0)    {        return false;    }    if (find(value - v[n-1], n-1, v, flags))    {        flags[n-1] = 1;        return true;    }    return find(value, n-1, v, flags);}int main(){    int value;    cin >> value;    vector<int> v;    vector<bool> flags;    int num;    while (cin >> num && num != 0)    {        v.push_back(num);        flags.push_back(false);    }    if (find(value, v.size(), v, flags))    {        for (unsigned i = 0; i < flags.size(); i++)        {            cout << flags[i] << " ";        }        cout << endl;        return 0;    }    cout << "ERRPR" << endl;    return 0;}

第四十四题

44.输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50

#include <iostream>#include <string>using namespace std;bool minAddMax(int a[], int n, int &result){    if (n <= 0 || n > 50)    {        return false;    }    int min = a[0], max = a[0];    for (int i = 1; i < n; i++)    {        if (a[i] < min)        {            min = a[i];        }        if (a[i] > max)        {            max = a[i];        }    }    result = min + max;    return true;}int main(){    int a[] = {1,2,3,4,5};    int result = 0;    cout << (minAddMax(a,5,result) ? to_string(result) : "ERROR") << endl;    return 0;}

第四十五题

45.子串转换:
将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。
要求实现函数:
void convert(char input,char output)
【输入】 char *input , 输入的字符串
【输出】 char *output ,输出的字符串
【返回】 无

#include <iostream>using namespace std;void convert(char *input,char* output){    while (*input != '\0')    {        char *ahead = input + 1;        if (*ahead == *input)        {            *output++ = ((*input++) - 'a' + 1) % 26 + 'a';            *output++ = ((*input++) - 'a' + 2) % 26 + 'a';            continue;        }        *output++ = ((*input++) - 'a' + 1) % 26 + 'a';    }    *output = '\0';}int main(){    char input[100],output[100];    cin.getline(input,100);    convert(input, output);    cout << output << endl;    return 0;}
1 0