天天看點

華為上機題彙總(十七)華為上機題彙總(十七)

華為上機題彙總(十七)

注:編譯環境為Visual Studio 2012,答案僅供參考。

目錄

  • 華為上機題彙總十七
    • 目錄
    • 第八十一題
    • 第八十二題
    • 第八十三題
    • 第八十四題
    • 第八十五題

第八十一題

81.對一個二維的整數數組,對指定列進行升序排序,傳回排列後的數組

例如:

3

2

2 6

3 3

4 1

1

2 1

3 3

4 6

#include <iostream>
using namespace std;

void mySort(int **a, int cols, int rows, int row){
    for (int i = ; i < cols - ; i++)
    {
        for (int j = i + ; j < cols; j++)
        {
            if (a[i][row] > a[j][row])
            {
                int tmp = a[i][row];
                a[i][row] = a[j][row];
                a[j][row] = tmp;
            }
        }
    }
}

int main()
{
    int cols, rows;
    cin >> cols >> rows;
    int **a = new int *[cols];
    for (int i = ; i < cols; i++)
    {
        a[i] = new int [rows];
    }

    for (int i = ; i < cols; i++)
    {
        for (int j = ; j < rows; j ++)
        {
            cin >> a[i][j];
        }
    }
    int row;
    cin >> row;
    mySort(a,cols,rows,row);

    for (int i = ; i < cols; i++)
    {
        for (int j = ; j < rows; j ++)
        {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }

    for (int i = ; i < cols; i++)
    {
        delete []a[i];
    }
    delete []a;
}
           

第八十二題

82.最大連續子序列乘積

給定一個整數序列(可能有正數,0和負數),求它的一個最大連續子序列乘積。比如給定數組a={3, -4, -5, 6, -2},則最大連續子序列乘積為360,即3*(-4)*(-5)*6=360。

#include <iostream>
using namespace std;

int max(int a, int b, int c){
    int tmp = a < b ? b : a;
    return tmp < c ? c : tmp;
}

int min(int a, int b, int c){
    int tmp = a > b ? b : a;
    return tmp > c ? c : tmp;
}

int maxMul(int *a, int n){
    int *Max = new int [n];
    int *Min = new int [n];

    int maxValue = a[];
    Max[] = a[];
    Min[] = a[];

    for (int i = ; i < n; i++)
    {
        Max[i] = max(Max[i-]*a[i],Min[i-]*a[i],a[i]);
        Min[i] = min(Max[i-]*a[i],Min[i-]*a[i],a[i]);
        if (maxValue < Max[i])
        {
            maxValue = Max[i];
        }
    }

    delete []Max;
    delete []Min;

    return maxValue;
}

int main()
{
    int a[] = {, -, -, , -}, n = ;
    cout << maxMul(a,n) << endl;
}
           

第八十三題

83.對整形資料組按照和指定整數的內插補點大小進行排序,

按照內插補點升序排列傳回。

輸入:

num = {1,2,3,4,5,10,17,18,19} value = 5

傳回:

{5,4,3,2,1,10,17,18,19}

#include <iostream>
using namespace std;

bool isBigger(int a, int b, int index){
    int tmp1 = a > index ? a - index : index - a;
    int tmp2 = b > index ? b - index : index - b;
    return tmp1 > tmp2;
}

void mySort(int *a, int n, int index){
    for (int i = ; i < n-; i++)
    {
        for (int j = i+; j < n; j++)
        {
            if (isBigger(a[i],a[j],index))
            {
                int tmp = a[i];
                a[i] = a[j];
                a[j] = tmp;
            }
        }
    }
}

int main()
{
    int a[] = {,,,,,,,,}, n = ;
    int index = ;
    mySort(a,n,index);
    for (int i = ; i < n; i++)
    {
        cout << a[i] << " ";
    }
    cout << endl;
}
           

第八十四題

84.取出整型資料中出現次數最多的元素,并按照升序排列傳回。

輸入:

num = {1,1,3,4,4,4,9,9,9,10} len = 10

傳回:

{4,9}

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

void printMost(vector<int> &input, vector<int> &output){
    int max = ;
    sort(input.begin(),input.end());
    auto begin = input.begin();
    while (begin != input.end())
    {
        auto ahead = begin + ;
        while (ahead != input.end() && *ahead == *begin)
        {
            ahead++;
        }
        int i = ahead - begin;
        if (i > max)
        {
            max = i;
            if (!output.empty())
            {
                output.clear();
            }
            output.push_back(*begin);
        }
        else if (i == max)
        {
            output.push_back(*begin);
        }
        begin = ahead;
    }

    for (unsigned i = ; i < output.size(); i++)
    {
        cout << output[i] << " ";
    }
    cout << endl;
}

int main()
{
    int a[] = {,,,,,,,,,}, len = ;
    vector<int> input(a,a+len), output;
    printMost(input,output);
}
           

第八十五題

85.小球落地

假設一個球從任意高度自由落下,每次落地後反跳回原高度的一半; 再落下, 求它在第5次落地時,共經曆多少米?第5次反彈多高?

輸入起始高度,int型

分别輸出第5次落地時,共經過多少米第5次反彈多高

【去掉小數末尾無效的0】

樣例輸入:1

#include <iostream>
using namespace std;

void compute(int n, double &sum, double &fifthHeight){
    double height = (double)n;
    for (int i = ; i < ; i++)
    {
        sum += height + height / ;
        height /= ;
    }
    fifthHeight = height;
    sum -= fifthHeight;
}

int main()
{
    int n;
    cin >> n;
    double sum = , fifthHeight;
    compute(n,sum,fifthHeight);
    cout << sum << " " << fifthHeight << endl;
}
           

繼續閱讀