华为上机题汇总(十七)

华为上机题汇总(十七)

注:编译环境为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 = 0; i < cols - 1; i++)
    {
        for (int j = i + 1; 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 = 0; i < cols; i++)
    {
        a[i] = new int [rows];
    }

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

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

    for (int i = 0; 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[0];
    Max[0] = a[0];
    Min[0] = a[0];

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

    delete []Max;
    delete []Min;

    return maxValue;
}

int main()
{
    int a[] = {3, -4, -5, 6, -2}, n = 5;
    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 = 0; i < n-1; i++)
    {
        for (int j = i+1; 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[] = {1,2,3,4,5,10,17,18,19}, n = 9;
    int index = 5;
    mySort(a,n,index);
    for (int i = 0; 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 = 0;
    sort(input.begin(),input.end());
    auto begin = input.begin();
    while (begin != input.end())
    {
        auto ahead = begin + 1;
        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 = 0; i < output.size(); i++)
    {
        cout << output[i] << " ";
    }
    cout << endl;
}

int main()
{
    int a[] = {1,1,3,4,4,4,9,9,9,10}, len = 10;
    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 = 0; i < 5; i++)
    {
        sum += height + height / 2;
        height /= 2;
    }
    fifthHeight = height;
    sum -= fifthHeight;
}

int main()
{
    int n;
    cin >> n;
    double sum = 0, fifthHeight;
    compute(n,sum,fifthHeight);
    cout << sum << " " << fifthHeight << endl;
}
时间: 2024-07-29 04:21:51

华为上机题汇总(十七)的相关文章

华为上机题汇总(六)

华为上机题汇总(六) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总六 目录 第二十六题 第二十七题 第二十八题 第二十九题 第三十题 第二十六题 26.一副牌中发五张扑克牌给你:让你判断数字的组成: 有以下几种情况: 1:四条:即四张一样数值的牌(牌均不论花色)2:三条带 一对 3:三条带两张不相同数值的牌 4:两对 5:顺子 包括 10,J,Q,K,A 6:什么都不是 7:只有一对 #include <iostream> #include <

华为上机题汇总(十四)

华为上机题汇总(十四) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十四 目录 第六十六题 第六十七题 第六十八题 第六十九题 第七十题 第六十六题 66.问题描述 股票是一种有价证券,是股份公司为筹集资金发给投资者作为公司资本部分所有权的凭证,成为股东以此获得股息(股利),并分享公司成长或交易市场波动带来的利润:但也要共同承担公司运作错误所带来的风险.南邮华为俱乐部会长小郑同学最近计划进入股市淘金,看中一支股票,借本次华为赛机会,请你帮忙指出:何时买

华为上机题汇总(十)

华为上机题汇总(十) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十 目录 第四十六题 第四十七题 第四十八题 第四十九题 第五十题 第四十六题 46.在给定字符串中找出单词( "单词"由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格.问号.数字等等:另外单个字母不算单词):找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中:如果某个单词重复出现多次,则只输出一次:如

华为上机题汇总(四)

华为上机题汇总(四) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总四 目录 第十六题 第十七题 第十八题 第十九题 第二十题 第十六题 16.将一个字符串的元音字母复制到另一个字符串,并排序(30分) 问题描述: 有一字符串,里面可能包含英文字母(大写.小写).数字.特殊字符,现在需要实现一函数,将此字符串中的元音字母挑选出来,存入另一个字符串中,并对字符串中的字母进行从小到大的排序(小写的元音字母在前,大写的元音字母在后,依次有序). 说明: 1.

华为上机题汇总(二十)

华为上机题汇总(二十) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总二十 目录 第九十六题 第九十七题 第九十八题 第九十九题 第一百题 第九十六题 96 . 给分数的循环节加括号 两个整数相除,将结果用字符串返回.如果是循环小数,将循环的位用括号括起来. 输入:1 3 输出:0.(3) 输入 1 7 输出 0.(142857) #include <iostream> #include <string> using namespace s

华为上机题汇总(十二)

华为上机题汇总(十二) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十二 目录 第五十六题 第五十七题 第五十八题 第五十九题 第六十题 第五十六题 56.在中国,形容夫妻恩爱的词汇中,大家用的比较多的就是"夫妻相".所谓"夫妻相",就是两个人看上去比较般配,长相.身材等某些方面有一定的相似度.本题则另辟蹊径,从人的姓名维度,以字母重复个数来寻找最具"夫妻相"的人. 题目中预先给定一组女士的姓名拼音.输

华为上机题汇总(八)

华为上机题汇总(八) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总八 目录 第三十六题 第三十七题 第三十八题 第三十九题 第四十题 第三十六题 36.输入一行数字:123 423 5645 875 186523 在输入第二行:23 将第一行中含有第二行中"23"的数输出并排序 结果即:123 423 186523 #include <iostream> #include <vector> #include <s

华为上机题汇总(十八)

华为上机题汇总(十八) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十八 目录 第八十六题 第八十七题 第八十八题 第八十九题 第九十题 第八十六题 86.合并输入的两个整形数组并去掉重复的数字按升序输出: 案例输入:3 1 2 5 -10 3 2 案例输出:-10 1 2 3 5 #include <iostream> #include <vector> #include <algorithm> using namespac

华为上机题汇总(十六)

华为上机题汇总(十六) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十六 目录 第七十六题 第七十七题 第七十八题 第七十九题 第八十题 第七十六题 消除类游戏很多,一般横.竖.斜有连续三个及以上相同就可以消除,为降低难度,本题只需要考虑一维的横消除即可, 即在给定的一组数字中(个,用例保证只有个),如果有连续三个及以上的数字相同,则将这些数字消除, 同时如果前一次消除后导致后面连在一起的也有三个及以上的数字相同,需继续消除,最终输出不能消除的剩余的数