天天看點

華為上機題彙總(九)華為上機題彙總(九)

華為上機題彙總(九)

注:編譯環境為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 = ; i < s.size(); i++)
    {
        cout << s[i];
        if ((i+) % n == ) cout << " ";
    }

    int residual = s.size() % n;
    if (!residual)
    {
        cout << endl;
        return ;
    } 
    for (int i = ; i < n - residual; i++)
    {
        cout << "0";
    }
    cout << endl;
    return ;
}
           

第四十二題

42.整數化為2進制數,32位長度。然後逆序輸出

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

int main()
{
    int n;
    cin >> n;
    vector<int> v(,);
    int i = ;
    while (n != )
    {
        v[i--] = n % ;
        n /= ;
    }
    for (auto b = v.rbegin();b != v.rend();++b){
        cout << *b;
    }
    cout << endl;
    return ;
}
           

第四十三題

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 == )
    {
        return true;
    }
    if ((value >  && n <= ) || value < )
    {
        return false;
    }
    if (find(value - v[n-], n-, v, flags))
    {
        flags[n-] = ;
        return true;
    }
    return find(value, n-, v, flags);
}

int main()
{
    int value;
    cin >> value;
    vector<int> v;
    vector<bool> flags;
    int num;
    while (cin >> num && num != )
    {
        v.push_back(num);
        flags.push_back(false);
    }
    if (find(value, v.size(), v, flags))
    {
        for (unsigned i = ; i < flags.size(); i++)
        {
            cout << flags[i] << " ";
        }
        cout << endl;
        return ;
    }
    cout << "ERRPR" << endl;
    return ;
}
           

第四十四題

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 <=  || n > )
    {
        return false;
    }
    int min = a[], max = a[];
    for (int i = ; 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[] = {,,,,};
    int result = ;

    cout << (minAddMax(a,,result) ? to_string(result) : "ERROR") << endl;
    return ;
}
           

第四十五題

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 + ;
        if (*ahead == *input)
        {
            *output++ = ((*input++) - 'a' + ) %  + 'a';
            *output++ = ((*input++) - 'a' + ) %  + 'a';
            continue;
        }
        *output++ = ((*input++) - 'a' + ) %  + 'a';
    }
    *output = '\0';
}

int main()
{
    char input[],output[];
    cin.getline(input,);
    convert(input, output);
    cout << output << endl;
    return ;
}
           

繼續閱讀