码迷,mamicode.com
首页 > 其他好文 > 详细

华为上机题汇总(九)

时间:2016-08-13 14:15:18      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:

华为上机题汇总(九)

注:编译环境为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;
}

华为上机题汇总(九)

标签:

原文地址:http://blog.csdn.net/sps900608/article/details/52198786

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!