【刷题汇总 --游游的水果大礼包、买卖股票的最好时机(二)、倒置字符串】

news2024/9/20 17:04:24

C++日常刷题积累

  • 今日刷题汇总 - day011
    • 1、游游的水果大礼包
      • 1.1、题目
      • 1.2、思路
      • 1.3、程序实现
    • 2、买卖股票的最好时机(二)
      • 2.1、题目
      • 2.2、思路
      • 2.3、程序实现
    • 3、倒置字符串
      • 3.1、题目
      • 3.2、思路
      • 3.3、程序实现 -- c语言
      • 3.4、程序实现 -- c++
    • 4、题目链接

今日刷题汇总 - day011

1、游游的水果大礼包

1.1、题目

在这里插入图片描述

1.2、思路

读完题知道,将n个苹果和m个桃子,按照一定比例组成不同价值的一号或二号礼包,求最多组成礼包的总价值。那么,通常类似的题都使用贪心法,尽可能让价值高的礼包,尽可能地多选,然后这道题不适用,很容易举反例。那么,就只好使用枚举了,也就是蛮力法,让一号礼包组成0个,二号礼包全选,接一号礼包选1个,而二号礼包选全选-1个,接着2个一号,n-2个二号礼包…直到1号全选,二号不选即可。期间不断更新最大价值,最后返回得到地最大价值即可。接下来,就是程序实现。

1.3、程序实现

首先,按照题目要求输入数据,注意数据范围超出这里使用long long,然后,根据1号礼包的苹果和桃子的比例,以及二号礼包的比例,推导边界控制,为了直观的理解,画个图:
在这里插入图片描述
所以推导1号礼包最多情况是由苹果决定的,而影响苹果使用个数的由n/2和m决定,所以取最小值得到1号礼包的最多能组成的数目,即边界控制:[0,min(n/2,m)]; 同理,二号礼包边界控制推导就是再减去一号礼包已使用个数之后得到:[n-i*2,(m-i)/2];最后由变量ret得到每次枚举的最大价值输出即可。总结这道题就是要分析处理好组装的比例关系,由关系推导价值求解即可。

#include <iostream>
using namespace std;
long long n, m, a, b;
int main()
{ 
    cin >> n >> m >> a >> b;
    long long ret = 0;
    for(long long x = 0;x <= min(n/2,m);x++)
    {
        long long y = min(n-x*2,(m-x)/2);
        ret = max(ret,a*x+b*y);
    }
    cout << ret << endl;
     return 0;
}

在这里插入图片描述
在这里插入图片描述

2、买卖股票的最好时机(二)

2.1、题目

在这里插入图片描述

2.2、思路

读完题,知道与上篇的买卖股票的最好时机(一)的区别在于,可以反复买卖股票,让其获得最大收益即可。上道题利用的逆向思维,从卖点入手,遍历卖点之前的价值,得到最小值从而求差值得到最大利润。那么这道题,由于可以反复够吗,那么从给的示例的上帝视角分析,发现只要买入的后面在涨就买,在跌点的前一个点就卖,反复如此,利润绝对就是最大值。为了方便理解,画个图:
在这里插入图片描述
那么接下来,就是程序实现。

2.3、程序实现

首先,按照题目要求完成输入,然后定义一个变量retsum表示最后的最大利润,接着直接遍历,只要第二天大于第一天就买入再卖出,求得每一段的利润累计到retsumu最后输出即可。

#include <iostream>
using namespace std;

const int N = 1e5 + 10;

int prices[N];

int main()
{
    int n;
    cin >> n;
    for(int i = 0;i < n; i++)
        cin >> prices[i];
    
    int retsum = 0;
    for(int i = 1;i < n; i++)
    {
        if(prices[i] - prices[i-1] > 0)
            retsum += (prices[i] - prices[i-1]);
    }
    cout << retsum << endl;
    return 0;
}

在这里插入图片描述
在这里插入图片描述

3、倒置字符串

3.1、题目

在这里插入图片描述

3.2、思路

读完题,知道,让我们逆置单词字符串,意味着逆置单词的位置,而不逆置字母顺序。这道题,跟很久以前C语言写过的单纯的逆置字符串题类似,那么根据示例分析,只需要交换单词的位置,再将每个单词单独逆置即可,其中注意标点符号和空格的处理即可。那么,这里涉及到逆置,先用C语言写,再用C++写,因为C++直接可以调用alogrithm算法库的reverse逆置比较方便。为了搞清楚思维过程,所以先用C语言实现。那么接下来,就是程序实现。

3.3、程序实现 – c语言

根据思路的分析,可以分为以下几个步骤:
(1)、逆置整个字符串,目的是实现单词的位置正确;
(2)、再根据空格与指针划分,每个单词;
(3)、逆置单独的每个单词,最后输出即可;
为了方便理解,画个图:
在这里插入图片描述
思路清晰后,完成C程序,首先定义满足数据范围的字符数组str,用gets完成带空格的字符串输入,因为scanf是以空格或回车等这类不显示字符作为判定输入结束的,所以用gets即可,接着封装一个reverse函数,传入指针交换两侧向中间走,完成字符串逆置,然后,利用工作指针start和end分别标记单词的开头和结尾,然后再逐步逆置单词,只要注意控制好end与空格的处理即可,最后数据str即可。

#include <stdio.h>
#include <string.h>

void reverse(char* left, char* right )
{
	while (left < right) {
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}

int main()
{	
	char str[101] = { 0 };
	gets(str);
	int len = strlen(str) - 1;
	reverse(str, str+len);
	char* start = str;
	while (*start)
	{
		char* end = start;
		while (*end != ' ' && *end != '\0')
		{
			end++;
		}
		reverse(start, end - 1);
		if (*end == ' ')
		{
			start = end+1;
		}
		else
		{
			start = end;
		}
	}
	printf("%s\n", str);
	return 0;
}

在这里插入图片描述
在这里插入图片描述

3.4、程序实现 – c++

首先,还是按照思路分析,完成C++代码即可。注意其中输入用getline输入一行,调用algorithm算法库的reverse逆置,以及空格处理即可。

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

int main()
{
    string str;
    getline(cin , str);
    reverse(str.begin(),str.end());

    int start = 0;
    int end = 0;
    size_t len = str.size();
    while(start < len)
    {
        end = start;
        while(end < len && str[end] != ' ') 
        {
            end++;
        }
        reverse(str.begin() + start, str.begin() + end);
        while(end < len && str[end] == ' ') 
            end++;
        start = end;
    }
    cout << str <<endl;
    return 0;
}

在这里插入图片描述
在这里插入图片描述

4、题目链接

游游的水果大礼包
买卖股票的最好时机(二)
倒置字符串

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1921946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

U盘打不开的终极解决方案:原因剖析、恢复策略与预防之道

U盘困境&#xff1a;打不开的焦虑与应对 在数字化时代&#xff0c;U盘作为数据交换与存储的重要工具&#xff0c;几乎成为了每个人工作、学习和生活中的必需品。然而&#xff0c;当您满怀期待地将U盘插入电脑&#xff0c;却遭遇“无法识别”、“无法访问”等提示&#xff0c;U…

安装isce2

今天再次尝试安装&#xff0c;之前试过2次都是卡在同一步&#xff0c;今天换成了用mamba conda就没有再报错了 全程参考云军老师的step by step教程&#xff0c;安装成功 GitHub - yunjunz/conda-envs: conda environment setup on Linux / macOS for InSAR data processing …

初识Spring Web MVC

1. 什么是 Spring Web MVC&#xff1f; Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架&#xff0c;从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc)&#xff0c;但它通常被称为"SpringMVC".Servlet&am…

宝马退出价格战,19万买不到i3了

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 宝马退出价格战 这一消息&#xff0c;源自知名汽车博主孙少军。 7月11日他发文称&#xff0c;“因价格战导致门店亏损严重&#xff0c;宝马7月将会开始降量保价。” 第二天他又做了补充&#xff0c…

SQL,python,knime将数据混合的文字数字拆出来,合并计算实战

将下面将数据混合的文字数字拆出来&#xff0c;合并计算 一、SQL解决&#xff1a; ---创建表插入数据 CREATE TABLE original_data (id INT AUTO_INCREMENT PRIMARY KEY,city VARCHAR(255),value DECIMAL(10, 2) );INSERT INTO original_data (city, value) VALUES (上海0.5…

如何判断代码是否是在UPDATE TASK的Session中执行?

1. 背景 有时我们想控制ABAP代码在UPDATE TASK中的逻辑&#xff0c;例如某些逻辑执行&#xff0c;某些逻辑不执行。 那么&#xff0c;我们应该如何判断当前代码运行的环境呢&#xff1f;也即&#xff0c;怎么知道一段运行时代码是运行在当前的ABAP session中&#xff0c;还是…

红帽官方福利:RHCE赠送免费补考

RHCE 红帽官方活动【免费补考来了】 新班 7月27日 RHCE 周末班 学完9月底考试&#xff0c;享受免费补考&#xff01; RHCE9.0 &#xff08;点击查看课程介绍&#xff09; 上课课时&#xff1a;72课时/12天考试辅导1-2天 开班频率&#xff1a;2个月开一期 最新新班&#x…

高精度定位与AI技术的深度融合——未来智慧世界的钥匙

引言在当今迅速发展的科技时代&#xff0c;精确定位和人工智能&#xff08;AI&#xff09;技术正在快速推动各领域的创新与变革。高精度定位结合AI技术所产生的融合效应&#xff0c;正在加速智慧城市、智能驾驶、智能物流以及许多其他领域的实现。这篇文章将详细探讨高精度定位…

栈(Stack)与队列(Queue,Deque)

前言&#xff1a; 栈与队列在数据结构中用法都相对比较简单&#xff0c;是数据结构中经常用到的两种。 1.栈&#xff08;Stack&#xff09; &#xff08;1&#xff09;特点&#xff1a; 先入后出&#xff0c;后入先出。栈的底层就是一个数组&#xff08;java原生库中&#x…

uniapp发送Form Data格式请求

设置header的Content-Type为 application/x-www-form-urlencoded 即可 uni.request({url: , // 接口urldata: {input: 写一篇一千字的作文}, // 入参method: POST, // 参数类型header: {"Content-Type": "application/x-www-form-urlencoded"}, // 请求头…

本地部署,isNet 图像背景去除

目录 摘要 引言 ISNet 架构 关键组件 技术原理 本地部署 运行结果 结论 参考文献 GitHub - xuebinqin/DIS: This is the repo for our new project Highly Accurate Dichotomous Image SegmentationThis is the repo for our new project Highly Accurate Dichotomous…

介绍一款数据准实时复制(CDC)中间件 `Debezium`

简介 文章开头先介绍一下什么是CDC。数据准实时复制(CDC)是目前行内实时数据需求大量使用的技术。常用的中间件有Canal、Debezium、Flink CDC等 下面我们做一下对比 各有优缺点吧,本主要介绍一下Debezium中间件。 Debezium是什么 Debezium是一个为变更数据捕获(CDC)提供…

220.贪心算法:根据身高重建队列(力扣)

代码解决 class Solution { public:// 定义排序规则&#xff1a;首先按身高降序排序&#xff0c;如果身高相同则按k值升序排序static bool cmp(const vector<int>&a, const vector<int>&b){if (a[0] b[0]) return a[1] < b[1]; // 如果身高相同&#…

注册自定义总线

1、在/sys/bus下注册一个自定义总线 #include<linux/module.h> #include<linux/init.h> #include<linux/kernel.h> #include<linux/kobject.h> #include<linux/slab.h> #include<linux/sysfs.h> #include<linux/device.h> #include…

【Linux】1w详解如何实现一个简单的shell

目录 实现思路 1. 交互 获取命令行 2. 子串分割 解析命令行 3. 指令的判断 内建命令 4. 普通命令的执行 补充&#xff1a;vim 文本替换 整体代码 重点思考 1.getenv和putenv是什么意思 2.代码extern char **environ; 3.内建命令是什么 4.lastcode WEXITSTATUS(sta…

Java-final关键字详解

Java-final关键字详解 一、引言 二、什么是 final 关键字&#xff1f; 三、final 变量 final 局部变量 final 实例变量 final 静态变量 四、final 方法 五、final 类 六、final 关键字的实际应用 1. 定义常量 2. 防止方法被重写 3. 创建不可变类 4. 优化性能 七、…

GitHub网页打开慢的解决办法

有时候看资料絮叨github网页打不开&#xff0c;经百度后&#xff0c;发下下面的方法有效。 1&#xff09;获取github官网ip 我们首先要获取github官网的ip地址&#xff0c;方法就是打开cmd&#xff0c;然后ping 找到github的地址&#xff1a;20.205.243.166 2&#xff09;配…

数据结构(Java):队列Queue集合力扣面试OJ题

1、队列 1.1 队列的概念 队列是一个特殊的线性表&#xff0c;只允许在一端&#xff08;队尾&#xff09;进行插入数据操作&#xff0c;在另一端&#xff08;对头&#xff09;进行删除数据。队列具有先进先出FIFO(First In First Out)的特性。 入队&#xff1a;数据只能从队尾…

【办公软件】PPT使用轮子动画做圈动作

在实际的PPT制作中&#xff0c;我们可能会用到画圈的动作来强调重点。如下所示为最基础的画圈动作。 那么如何来做一个这样的动作呢&#xff1f; 首先在PPT中选择插入&#xff0c;选择形状椭圆 然后按Shift画图&#xff0c;即可画出一个正圆 然后使用绘图工具&#xff0c;将开关…

程序的控制结构——if-else语句(双分支结构)【互三互三】

目录 &#x1f341; 引言 &#x1f341;if-else语句&#xff08;双分支结构&#xff09; &#x1f449;格式1&#xff1a; &#x1f449;功能&#xff1a; &#x1f449;程序设计风格提示&#xff1a; &#x1f449;例题 &#x1f449;格式2&#xff1a; &#x1f449;…