C++每日一练:任务分配问题(详解)

这篇具有很好参考价值的文章主要介绍了C++每日一练:任务分配问题(详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

今天这题比较有意思,排序算法还是比较有用的,显然选择排序在这里很容易实现。


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目描述

题目描述:
小明手头上有n个问题,每个问题都有一个数值,表示这个问题的难度;正好小明团队有n个人,每个人都有一个数值,表示这个人的能力 现在小明要把这n个问题分配给每个人,要求能力更高的人分配到更高难度的问题

输入描述:
第1行包含一个数字 n (n <= 100000),表示小明手头上有n个问题,团队有n个人 第2行到第n+1行,每一行包含1个数字,表示n个问题的难度(正整数,小于10^9) 第n+2到2n+1行,每一行包含一个数字,表示团队n个人的能力值(正整数,小于10^9)

输出描述:
输出n行,按输入的顺序,输出每个人分配到的问题的难度,如果有两个人能力值相同,那么输入的顺序靠前,分配到更高难度的问题

示例:
输入
3
1
2
3
3
2
1

输出
3
2
1

二、解题

1.分析

选择排序的总体思路就是:每一次遍历选择一个最大或最小的元素,把它放到正确的位置上,所以选择排序的时间复杂度基本上是n^2。在本题中因为要同时遍历二个数组,时间复杂度会更高。
因不是按从小到大或从大到小排列。而是按能力值排序,所以需要稍做变通,新建一个数组,将每次循环得到的最大值(按题目要求)放到对应最大能力的位置。
又因输出要求string,最后转vector的时候需要转换一次。

2.代码并注释

代码如下:

#include <iostream>
#include <string>
#include <sstream>
#include <vector>

using namespace std;
vector<string> solution(int n, vector<int>& arr1, vector<int>& arr2){
    vector<string> result;
    // TODO:
    //定义最大能力,最大工作,最大能力的index,最大工作的index,t是循环计数
    int max_ab=0, max_wo=0, max_ab_id=0, max_wo_id=0, t=0;
    int arr[n];    //新建一个组数用来存放排序结果
    
    while(t<n){
        for (int i=0; i<n; ++i){
            if (arr2[i]>max_ab){   //找出最大能力,及它的index
                max_ab = arr2[i];
                max_ab_id = i;
            }
            if (arr1[i]>max_wo){   //找出最大工作,及它的index
                max_wo = arr1[i];
                max_wo_id = i;
            }
        }
        arr2[max_ab_id] = 0;    //将最大能力置0
        arr1[max_wo_id] = 0;    //将最大工作置0
        arr[max_ab_id]=max_wo;   //在新数组里对应index中放入最大工作
        t++;
        max_ab=0, max_wo=0, max_ab_id=0, max_wo_id=0;   //初始值全置0
    }
    for (int i=0; i<n; ++i){   //将结果倒入result
        string tmp = to_string(arr[i]);
        result.push_back(tmp);
    }
    return result;
}

还是要吐槽一下,CSDN这个C++编译器… 太烂了!在VScode中可以这样写:

    int arr[3]={1,2,3};
    string arrs[3];
    for(int i=0; i<3; ++i){
        arrs[i]=to_string(arr[i]);
    }
    vector<string> v(arrs,arrs+3);

也就是说,我可以直接把arr数组定义成string,然后一行代码倒入vector,可在这里死活报错!
搞不明白!按C++Primer的作者Stanley B.Lippman的说法,C++程序员应该有编译器的思维方式。


总结

这题对练习掌握选择排序还是很不错的。
可惜C++这么冷门的吗?发现笔者其它乱七八糟的内容还有人看,正经写点C++的反而没人看了…阅读数几周了都还是个位数!或者改用python3来解题会不会看的人多些?
C/C++还是很好的语言,学会了以后可以说:天下就没有看着不眼熟的代码!
也可能是笔者这万金油啥都不精,写得太烂了吧。文章来源地址https://www.toymoban.com/news/detail-426343.html

到了这里,关于C++每日一练:任务分配问题(详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++每日一练(7):爬山

    题目描述 LeiQ最近参加了一个登山俱乐部,部长给他了一个n*m地图,地图上的每一个格子的值表示一个山的海拔高度,LeiQ现在在(x,y)表示在地图上的位置,他想要登上地图上最高的山,所以他想知道他爬上最高的山的山顶还需向上爬多少米。 例如:  xy 1 2 3 1 100  130  150 2 200  

    2024年02月03日
    浏览(26)
  • C++每日一练(15):简单幂计算

    题目描述 输入两个数a和b,求a的b次方。 输入 输入两个整数a,b(1=a=10,1=b=15)。 输出 输出一个正整数,该值=1000000000000。 输入样例 3 3 输出样例 27 参考答案 这段是用了pow函数,当然也可以用for循环实现(这里就不展示了哈)。 

    2024年01月17日
    浏览(60)
  • C++每日一练(8):图像相似度

    题目描述 给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。 说明:若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。 输入 第一行包含两个整数m和n,表示图像

    2024年02月03日
    浏览(37)
  • C++每日一练:最长递增区间 && 阿波罗的魔力宝石 && 投篮

    今天的题太简单,甚至 “最长递增区间” 和 “投篮” 就是一个问题。实在没事干,也给做了!直接上代码算了… 提示:以下是本篇文章正文内容 代码如下: 注意点就是默认值为1。 代码如下: 很简单的冒泡排序,没加flag。 代码如下: 这简直和第一题一模一样!我估计条

    2023年04月26日
    浏览(44)
  • 【任务分配】基于市场方法求解多机器人任务分配问题附Matlab代码

     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab完整代码及仿真定制内容点击👇 智能优化算法       神经网络预测       雷达通信       无

    2024年04月09日
    浏览(46)
  • Python每日一练——第5天:闰年问题升级版

    前言 📢📢 Python每日一练来啦,本文已收录于: 《Python每日一练》专栏 此专栏目的在于,帮忙学习Python的小白提高编程能力,训练逻辑思维,每周持续更新中,欢迎免费订阅!!! 输入年月日,输出该日期是否是闰年,并且输出该日期是此年份的第几天 闰年判断条件(两

    2024年02月05日
    浏览(47)
  • Python每日一练——第10天:经典问题猴子吃桃

    猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。 到第10天早上想再吃时,见只剩下一个桃子了。 求原来它一共摘了多少个桃子。 这题得倒着推。第

    2024年02月07日
    浏览(89)
  • 【任务分配】基于matlab市场的方法求解多机器人任务分配问题【含Matlab源码 3992期】

    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。 🍎个人主页:海神之光 🏆代码获取方式: 海神之光Matlab王者学习之路—代码获取方式 ⛳️座右铭:行百里者,半于九十。 更多Matlab仿真内容点击👇 Matlab图像处理(进阶版) 路径规划

    2024年03月11日
    浏览(44)
  • C语言每日一练——第118天:百钱百鸡问题

    🌟 前言 Wassup guys,我是Edison 😎 今天是C语言每日一练,第117天! Let’s get it! 中国古代数学家 张丘健 在他的 《算经》 中提出了一个著名的 “百钱百鸡问题” 👇   一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡、母鸡、小鸡各多少

    2023年04月11日
    浏览(73)
  • Java每日一练(20230417) N 皇后、搜索二维矩阵、发奖金问题

    目录 1. N 皇后  🌟🌟🌟 2. 搜索二维矩阵  🌟🌟 3. 发奖金问题 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 n 皇后问题  研究的是如何将  n  个皇后放置在  n×n  的棋盘上,并且使皇后彼此之间不能相互攻

    2024年02月15日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包