华为上机题汇总(十五)

华为上机题汇总(十五)

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

目录

  • 华为上机题汇总十五

    • 目录
    • 第七十一题
    • 第七十二题
    • 第七十三题
    • 第七十四题
    • 第七十五题

第七十一题

71.渡口问题:

同类车辆先来先上,客车优于货车,客车上了4辆后才可以上货车,客车不足4辆可用货车补充。

客车为0,货车为1

输入:5 00101 输出:01324

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

void Seq(queue<int> &cars, queue<int> &trucks, vector<int> &result){
    int count = 0;
    while (!cars.empty() && !trucks.empty())
    {
        if (count == 4)
        {
            result.push_back(trucks.front());
            trucks.pop();
            count = 0;
        }
        else
        {
            result.push_back(cars.front());
            cars.pop();
            count++;
        }
    }
    while (!cars.empty())
    {
        result.push_back(cars.front());
        cars.pop();
    }
    while (!trucks.empty())
    {
        result.push_back(trucks.front());
        trucks.pop();
    }
}

int main()
{
    queue<int> cars, trucks;
    vector<int> result;
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        bool num;
        cin >> num;
        if (num)
        {
            trucks.push(i);
        }
        else
        {
            cars.push(i);
        }
    }
    Seq(cars,trucks,result);
    for (unsigned i = 0; i < result.size(); i++)
    {
        cout << result[i] << " ";
    }
    cout << endl;
    return 0;
}

第七十二题

72.求两个整型数组的异集,即A+B-(A与B的交集)

#include <iostream>
using namespace std;

int cmp(const void *a, const void *b){
    return *(int*)a - *(int*)b;
}

void intersection(int *a1, int l1, int *a2, int l2, int *output){
    qsort(a1,l1,sizeof(int),cmp);
    qsort(a2,l2,sizeof(int),cmp);

    int b1 = 0, b2 = 0;
    while (b1 != l1 && b2 != l1)
    {
        if (a1[b1] < a2[b2])
        {
            *output++ = a1[b1++];
        }
        else if (a1[b1] > a2[b2])
        {
            *output++ = a2[b2++];
        }
        else
        {
            *output++ = a1[b1++];
            b2++;
        }
    }
    while (b1 != l1)
    {
        *output++ = a1[b1++];
    }
    while (b2 != l2)
    {
        *output++ = a2[b2++];
    }
}

第七十三题

73.输入包括多个行数,首先给出整数N(1

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

bool judge(const string &s){
    int tCount = 0, sCount = 0;
    for (unsigned i = 0; i < s.size(); i++)
    {
        if (s[i] == ‘t‘ || s[i] == ‘T‘)
        {
            tCount++;
        }
        else if (s[i] == ‘s‘ || s[i] == ‘S‘)
        {
            sCount++;
        }
    }
    return tCount > sCount;
}

int main()
{
    int n;
    cin >> n;
    cin.get();
    while (n-- > 0)
    {
        string s;
        getline(cin,s);
        if (s.empty() || s.size() > 100)
        {
            cout << "Error" << endl;
        }
        else
        {
            cout << (judge(s) ? "English" : "Deutsch") << endl;
        }
    }
}

第七十四题

74.飞机最少换乘次数问题

描述

设有n个城市,编号为0~n-1,m条单向航线的起点和终点由输入提供,寻找一条换乘次数最少的线路方案。

输入

第一行为三个整数n、m、v,表示城市数、单向航线数和起点城市。以下m行每行两个整数,表示一条边的起点、终点,保证不重复、不失败。2≤n≤20,1≤m≤190

输出

共n-1行,分别是从起点城市v到其他n-1个城市最少换乘次数,按照终点城市序号从小到大顺序输出,不能抵达时输出-1。

样例输入

3 2 0

0 1

1 2

样例输出

1

2

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

bool canVisit(const vector<int> &v, int index){
    for (unsigned i = 0; i < v.size(); i++)
    {
        if (index == v[i])
        {
            return false;
        }
    }
    return true;
}

bool findWay(int current, const int end, int n, const vector<vector<int> > &map, vector<int> hasVisit, int &min){
    if (current == end)
    {
        int size = hasVisit.size() - 1;
        if (size  < min)
        {
            min = size;
        }
        return true;
    }

    bool flag = false;
    for (int i = 0; i < n; i++)
    {
        if (map[current][i] == 1 && canVisit(hasVisit,i))
        {
            vector<int> tmp = hasVisit;
            tmp.push_back(i);
            flag |= findWay(i,end,n,map,tmp,min);
        }
    }
    return flag;
}

int main()
{
    int n, m, start;
    cin >> n >> m >> start;
    vector<int> v(n,0);
    vector<vector<int> >map(n,v);
    while (m-- > 0)
    {
        int i1, i2;
        cin >> i1 >> i2;
        map[i1][i2] = 1;
    }
    for (unsigned i = 0; i < v.size(); i++)
    {
        if (i == start)
        {
            continue;
        }

        vector<int> hasVisit;
        hasVisit.push_back(start);
        int min = n;
        if (findWay(start,i,n,map,hasVisit,min))
        {
            cout << min << endl;
        }
        else
        {
            cout << "-1" << endl;
        }
    }
}

第七十五题

75连通OR不连通

描述

给定一个无向图,一共n个点,请编写一个程序实现两种操作:

D x y 从原图中删除连接x,y节点的边。

Q x y 询问x,y节点是否连通

输入

第一行两个数n,m(5<=n<=40000,1<=m<=100000)

接下来m行,每行一对整数 x y (x,y<=n),表示x,y之间有边相连。保证没有重复的边。

接下来一行一个整数 q(q<=100000)

以下q行每行一种操作,保证不会有非法删除。

输出

按询问次序输出所有Q操作的回答,连通的回答C,不连通的回答D

样例输入

3 3

1 2

1 3

2 3

5

Q 1 2

D 1 2

Q 1 2

D 3 2

Q 1 2

样例输出

C

C

D

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

int main()
{
    int n, m, q;
    cin >> n >> m;
    vector<int> v(n,0);
    vector<vector<int> >map(n,v);
    while (m-- > 0)
    {
        int i1, i2;
        cin >> i1 >> i2;
        map[i1-1][i2-1] = 1;
        map[i2-1][i1-1] = 1;
    }

    cin >> q;
    while (q-- >0)
    {
        char c;
        int i1, i2;
        cin >> c >> i1 >> i2;
        if (c == ‘Q‘)
        {
            cout << (map[i1-1][i2-1] ? "C" : "D") << endl;
        }
        else if(c == ‘D‘)
        {
            map[i1-1][i2-1] = 0;
            map[i2-1][i1-1] = 0;
        }
    }

}
时间: 2024-11-09 17:55:16

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

华为上机题汇总(五)

华为上机题汇总(五) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总五 目录 第二十一题 第二十二题 第二十三题 第二十四题 第二十五题 第二十一题 21.通过键盘输入100以内正整数的加.减运算式,请编写一个程序输出运算结果字符串. 输入字符串的格式为:"操作数1 运算符 操作数2","操作数"与"运算符"之间以一个空格隔开. 补充说明: 1. 操作数为正整数,不需要考虑计算结果溢出的情况. 2. 若输

华为上机题汇总(十)

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

华为上机题汇总(十二)

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

华为上机题汇总(十六)

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

华为上机题汇总(十九)

华为上机题汇总(十九) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十九 目录 第九十一题 第九十二题 第九十三题 第九十四题 第九十五题 第九十一题 91.按照指定规则对输入的字符串进行处理. 详细描述: 将输入的两个字符串合并. 对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序.这里的下标意思是字符在字符串中的位置. 对排训后的字符串进行操作,如果字符为'0'--'9'或者'A'--'F'或者'a'--'f',则

华为上机题汇总(十四)

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

华为上机题汇总(十八)

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

华为上机题汇总(二十二)

华为上机题汇总(二十二) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总二十二 目录 第一百零六题 第一百零七题 第一百零八题 第一百零九题 第一百一十题 第一百一十一题 第一百零六题 106.去饭店吃饭 一个男人3元 一个女人2元 一个小孩1元 现输入总人数和总花费 #include <iostream> #include <vector> using namespace std; void display(const vector<