首页 > 编程语言 >【c++笔试强训】(第十六篇)

【c++笔试强训】(第十六篇)

时间:2024-11-20 13:19:46浏览次数:3  
标签:强训 arr 第十六 int long 算法 c++ 大礼包 ret

目录

游游的⽔果⼤礼包(枚举)

题目解析

讲解算法原理

编写代码

买卖股票的最好时机(⼆)(贪⼼)

题目解析

讲解算法原理

编写代码


游游的⽔果⼤礼包(枚举)

题目解析

1.题目链接:登录—专业IT笔试面试备考平台_牛客网

2.题目描述

题目描述

游游有nnn个苹果,mmm个桃子。她可以把2个苹果和1个桃子组成价值aaa元的一号水果大礼包,也可以把1个苹果和2个桃子组成价值bbb元的二号水果大礼包。游游想知道,自己最多能组成多少价值总和的大礼包?

输入描述:

四个正整数n,m,a,bn,m,a,bn,m,a,b,用空格隔开。分别代表苹果的数量、桃子的数量、一号大礼包价值、二号大礼包价值。
1≤n,m,a,b≤1061\leq n,m,a,b\leq 10^61≤n,m,a,b≤106

输出描述:

一个整数,代表大礼包的最大价值总和。

示例1

输入

3 4 1 2

3 4 1 2

输出

4

4

说明

组成两个二号水果大礼包,使用了2个苹果和4个桃子。总价值为4。

示例2

输入

1 1 5 6

1 1 5 6

输出

0

0

讲解算法原理

解法:
算法思路:

很容易想到贪⼼,但是很不幸,贪⼼是错的。
正确的解法应该是枚举所有的情况~

编写代码

c++算法代码:

#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++) // 枚举 1 号礼包的个数 {
 long long y = min(n - x * 2, (m - x) / 2); // 计算 2 号礼包的个数 ret = max(ret, a * x + b * y); } 
 cout << ret << endl;
 
 return 0;
}

java算法代码:

import java.util.*;
public class Main
{
 public static void main(String[] args)
 {
 Scanner in = new Scanner(System.in); long n = in.nextInt(); long m = in.nextInt(); long a = in.nextInt(); long b = in.nextInt();
 
 long ret = 0;
 for(long x = 0; x <= Math.min(n / 2, m); x++) // 枚举 1 号礼包的个数 {
 long y = Math.min(n - x * 2, (m - x) / 2); // 计算 2 号礼包的个数 ret = Math.max(ret, a * x + b * y); }
 System.out.println(ret);
 }
}

 

买卖股票的最好时机(⼆)(贪⼼)

题目解析

1.题目链接:买卖股票的最好时机(二)_牛客题霸_牛客网

2.题目描述

描述

假设你有一个数组prices,长度为n,其中prices[i]是某只股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益

1. 你可以多次买卖该只股票,但是再次购买前必须卖出之前的股票

2. 如果不能获取收益,请返回0

3. 假设买入卖出均无手续费

数据范围: 0 \le n \le 1 \times 10^50≤n≤1×105 , 1 \le prices[i] \le 10^41≤prices[i]≤104

要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)

进阶:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)

输入描述:

第一行输入一个正整数 n ,表示数组 prices 的长度

第二行输入 n 个正整数,表示数组中prices的值

输出描述:

输出最大收益

示例1

输入:

7
8 9 2 5 4 7 1

输出:

7

说明:

在第1天(股票价格=8)买入,第2天(股票价格=9)卖出,获利9-8=1
在第3天(股票价格=2)买入,第4天(股票价格=5)卖出,获利5-2=3
在第5天(股票价格=4)买入,第6天(股票价格=7)卖出,获利7-4=3
总获利1+3+3=7,返回7     
 

示例2

输入:

5
5 4 3 2 1

输出:

0

说明:

由于每天股票都在跌,因此不进行任何交易最优。最大收益为0。          

示例3

输入:

5
1 2 3 4 5

输出:

4

说明:

第一天买进,最后一天卖出最优。中间的当天买进当天卖出不影响最终结果。最大收益为4。             

讲解算法原理

解法:
算法思路:
⼩贪⼼:

因为可以⽆限次交易,因此,只要股票的价格有上升,就统统把利润拿到⼿。

编写代码

c++算法代码:

#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int n;
int arr[N];
int main()
{
 cin >> n;
 for(int i = 0; i < n; i++) cin >> arr[i];
 int ret = 0;
 for(int i = 1; i < n; i++)  if(arr[i] > arr[i - 1]) ret += arr[i] - arr[i - 1];
 cout << ret << endl;
 return 0;
}

java算法代码:

import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main
{
 public static void main(String[] args) 
 {
 Scanner in = new Scanner(System.in); int n = in.nextInt(); int[] arr = new int[n]; for(int i = 0; i < n; i++)
 {
 arr[i] = in.nextInt();
 }
 int ret = 0;
 for(int i = 1; i < n; i++)
 {
 if(arr[i] > arr[i - 1])
 {
 ret += arr[i] - arr[i - 1];
 }
 }
 System.out.println(ret);
 }
}

标签:强训,arr,第十六,int,long,算法,c++,大礼包,ret
From: https://blog.csdn.net/weixin_73861555/article/details/143908505

相关文章

  • (2024最新毕设合集)基于SpringBoot的校园共享厨房信息系统-72647|可做计算机毕业设计JAV
    目 录摘要第一章 绪论1.1选题背景与意义1.2研究现状1.3论文结构与章节安排第二章系统分析2.1可行性分析2.1.1技术可行性分析2.1.2 经济可行性分析2.1.3操作可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.3 系统用例分......
  • C++(构造函数和创建类对象)
    一)构造函数的概念构造函数是一种特殊的成员函数,用于在创建对象时初始化对象的数据成员。它的主要目的是确保对象在使用前被正确地初始化,使得对象处于一个合理的初始状态。构造函数的名称与类名相同,没有返回类型(包括void)。例如,对于一个名为MyClass的类,其构造函数可以写成MyClass()......
  • C++ 之 VS2010 和MySQL数据库的链接问题
    目录代码#include<winsock.h>#include#include#include<mysql.h>usingnamespacestd;#pragmacomment(lib,"ws2_32.lib")#pragmacomment(lib,"libmysql.lib")//单步执行,不想单步执行就注释掉#defineSTEPBYSTEPintmain(){cout<<&q......
  • 针对初学者的C和C++23的对比学习-4.循环结构的学习
    4.循环结构的学习学习目标:学习内容:了解for语句:for循环的执行流程了解while语句:while循环的执行流程了解dowhile语句:dowhile循环的执行流程了解break和continue的使用for,while和dowhile的对比练习学习目标:了解循环结构了解for语句了解while语句了解d......
  • C++语言之模版与类型转换
    模版C++的泛型编程可以将数据类型作为参数进行传递关键字:    C++模版的语法使用"<>"来表示泛型类型,并使用关键字template来定义和声明模版分类:    模版函数    模版类模版函数语法:    template<class假设的类型1,class假设......
  • 《C++ 构建区块链:创世区块的初始化之道》
    在区块链这个神秘而充满魅力的技术领域中,用C++构建区块链是一项极具挑战性和创新性的工作。而其中,初始化创世区块是整个区块链大厦的基石,它承载着区块链的起源和根本属性,就像生命起源中的第一个细胞一样重要。今天,我们就来深入探讨一下在C++构建区块链时,如何进行创世区......
  • 《C++ 实现区块链:区块时间戳的存储与验证机制解析》
    在区块链这个复杂而精妙的技术架构中,时间戳是一个至关重要的元素,尤其当我们使用C++来实现区块链时,对区块时间戳的存储和验证机制设计更是不容忽视。这一机制如同区块链的时间脉搏,为整个系统的有序运行和数据可信性提供了坚实的保障。时间戳在区块链中的核心意义时间戳在......
  • 【优选算法篇】算法江湖中的碎玉拾光——C++模拟题全解,踏步逐章细细品味
    文章目录C++模拟题详解:基础题解与细致分析前言第一章:基础练习1.1替换所有的问号(easy)解法(模拟)C++代码实现易错点提示时间复杂度和空间复杂度1.2提莫攻击(easy)解法(模拟+分情况讨论)C++代码实现易错点提示时间复杂度和空间复杂度1.3N字形变换(medium)解法(模拟+找......
  • 嵌入式安卓开发使用LLDB进行断点调试C/C++代码
    GDBorLLDB?较新的安卓NDK已经没有包括gdbserver了,而且安卓官网也说了,后续不会支持gdb了。我自己之前费了很大的功夫,去交叉编译一个gdbserver,但最后用起来一大堆莫名其妙的问题。所以还是使用LLDB吧。获取相应的工具https://developer.android.google.cn/ndk/downloads这里下......
  • C++ Lambda表达式笔记
    1.什么是Lambda表达式?Lambda表达式是C++11引入的一种特性,允许定义匿名函数(没有名字的函数),并且可以像普通函数一样调用,甚至可以作为参数传递给其他函数。基本语法:[capture_list](parameters)->return_type{function_body};[capture_list]:捕获列表,决定外部变量如何......