每日练习之排序——链表的合并;完全背包—— 兑换零钱

链表的合并

题目描述

运行代码

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{  int a[31];
    for(int i = 1;i <= 30;i++)
        cin>>a[i];
    sort(a + 1,a + 1 + 30);
    for(int i = 1;i < 30;i++)
       cout<<a[i]<<" ";
   cout<<a[30]<<endl;
    return 0;
}

代码思路

  1. 定义数组:定义了一个大小为31的整数数组a,但实际上我们只使用前30个位置(从a[1]a[30])。在C++中,数组通常从索引0开始,但这里为了某种原因(可能是题目要求或其他原因),代码从索引1开始。
  2. 输入数据:使用for循环从标准输入读取30个整数,并将它们存储在数组a的索引1到30中。
  3. 排序数据:使用std::sort函数对数组进行排序。注意,这里传递给sort函数的是数组的起始地址和结束地址(不包括结束地址对应的元素)。
  4. 输出数据:使用for循环输出排序后的数组元素。但是,这里有一个小错误:循环的条件是i < 30,这意味着它会输出索引从1到29的元素,而遗漏了索引为30的元素。
  5. 输出最后一个元素:在for循环之后,单独输出索引为30的元素。

改进代码

  1. 数组索引:为了与C++的常规做法保持一致,并避免潜在的错误,最好从索引0开始使用数组。这样,你就不需要为数组分配额外的空间,也不需要记住从哪个索引开始读取或写入数据。
  2. 输出循环:为了简洁起见,可以将输出索引为30的元素的代码移到for循环中。这样,你就不需要单独处理最后一个元素了。
#include<iostream>  
#include<algorithm>  
using namespace std;   
int main()  
{  
    int a[30]; // 直接定义大小为30的数组  
    for(int i = 0; i < 30; i++) // 从索引0开始读取数据  
        cin >> a[i];  
    sort(a, a + 30); // 直接使用数组的起始和结束地址  
    for(int i = 0; i < 30; i++) // 从索引0开始输出数据  
        cout << a[i] << " ";  
    cout << endl; // 在循环后直接输出换行符  
    return 0;  
}

 兑换零钱

题目描述

运行代码

#include<bits/stdc++.h>
#include<iostream>
using namespace std;
const int mod=1e9+7;
int a[20]={1,2,5,10,20,50,100,200,500,1000,2000,5000,10000},dp[100010];
int main()
{
	dp[0]=1;
	for(int i=0;i<13;i++)
        for(int j=a[i];j<=100000;j++)
            dp[j]=(dp[j]+dp[j-a[i]])%mod;
	int N,T;
	cin>>T;
	while( T-- )
	{
		cin>>N;
		cout<<dp[N]<<endl;
	}
	 return 0;
}

代码思路

  1. 初始化dp[0]为1,因为凑成面额0只有一种方式(即不使用任何硬币)。
  2. 使用两个嵌套的循环来计算dp数组的其他元素。外层循环遍历硬币数组a,内层循环遍历从当前硬币面额到100000的所有可能面额。对于每个面额j,我们都检查是否可以使用当前硬币a[i]来凑成它。如果可以(即j >= a[i]),则dp[j]的值是原来的值加上dp[j-a[i]](即不使用当前硬币和使用当前硬币的凑法数之和)。
  3. 最后,程序读取测试用例数量T,然后对每个测试用例读取一个整数N,并输出dp[N],即凑成面额N的方法数。

改进建议

  1. 避免使用<bits/stdc++.h>:这个头文件虽然包含了几乎所有标准库,但它不是标准C++的一部分,而且会增加编译时间。建议只包含你需要的头文件。
  2. 数组大小:虽然这里定义dp数组的大小为100010是足够的,但如果你想要一个更通用的解决方案,你可以根据输入的最大可能值来动态分配这个数组的大小。
  3. 输入验证:虽然在这个问题中可能不需要,但在实际应用中,验证输入的有效性(例如,确保N是非负的)是一个好习惯。
  4. 注释:添加注释来解释代码的每个部分是如何工作的,以及为什么选择这种特定的实现方式,可以帮助其他人(或未来的你)更容易地理解代码。
  5. 优化:虽然对于这个问题来说,当前的实现已经足够快,但如果你在处理更大的面额或更多的硬币时,你可能需要考虑更高效的算法,如使用背包问题的优化技术。

改进代码

#include <iostream>  
#include <vector>  
using namespace std;  
const int MOD = 1e9 + 7;  
const int MAX = 100000; 
vector<int> coin = {1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000};  
// 动态规划表,用于存储凑成不同面额的方法数  
vector<int> Amount(MAX + 1, 0);  
int main() {  
    // 初始化凑成面额0的方法数为1  
   Amount[0] = 1;   
    // 动态规划计算凑成不同面额的方法数  
    for (int i = 0; i < coin.size(); i++) {  
        for (int j = coin[i]; j <= MAX; j++) {  
            Amount[j] = (Amount[j] + Amount[j - coin[i]]) % MOD;  
        }  
    }  
    int T, N;  
    cin >> T; // 读取测试用例数量   
    while (T--) {  
        cin >> N; // 读取当前测试用例的面额  
        cout <<Amount[N] << endl; // 输出凑成面额N的方法数  
    }   
    return 0;  
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

走进创新高地,探索职业未来——记大学生参观刺掌信息科技学习活动

在这个向阳生长&#xff0c;充满活力的5月&#xff0c;一群来自江苏大学的充满朝气与求知欲的大学生们来我司参观学习&#xff0c;他们带着对网络安全的热爱和职业生涯的憧憬&#xff0c;走进我们的企业&#xff0c;开始了探索之旅。 交流会上&#xff0c;江苏刺掌信息科技有限…

Python使用multiprocessing实现多进程

大家好&#xff0c;当我们工作中涉及到处理大量数据、并行计算或并发任务时&#xff0c;Python的multiprocessing模块是一个强大而实用的工具。通过它&#xff0c;我们可以轻松地利用多核处理器的优势&#xff0c;将任务分配给多个进程并同时执行&#xff0c;从而提高程序的性能…

CTFHUB技能树——SSRF(二)

目录 上传文件 ​FastCGI协议 Redis协议 上传文件 题目描述&#xff1a;这次需要上传一个文件到flag.php了.祝你好运 index.php与上题一样&#xff0c;使用POST请求的方法向flag.php传递参数 //flag.php页面源码 <?phperror_reporting(0);if($_SERVER["REMOTE_ADDR&…

“从根到叶:使用决策树导航数据”

目录 一、说明 二、什么是决策树&#xff1f; 三、基本概念&#xff1a; 四、工作原理&#xff1a; 五、分类原理分析 5.1 信息熵&#xff1a; 5.2 信息增益&#xff1a; 5.3 基尼杂质&#xff1a; 5.4 基尼系数和熵的区别&#xff1a; 六、对于回归决策树&#xff1a; 6.1 均方…

OR-Oncology Research 肿瘤学研究

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、投稿咨询 一、期刊简介 Oncology Research以临床前和临床癌症治疗为特色&#xff0c;发表了高质量的同行评审研究&#xff0c;有助于在分子生物学、细胞生物学、生物化学、生物物理学、遗传学、生物学、内分泌学…

128天的创意之旅:从初心到成就,我的博客创作纪念日回顾

文章目录 &#x1f680;机缘&#xff1a;初心的种子——回望创作之旅的启航&#x1f308;收获&#xff1a;成长的果实——128天创作之旅的宝贵馈赠❤️日常&#xff1a;创作与生活的交织&#x1f44a;成就&#xff1a;代码的艺术&#x1f6b2;憧憬&#xff1a;未来的蓝图 &…

【RabbitMQ】SpringAMQP--消息转换器

SpringAMQP–消息转换器 测试发送Object类型消息 1.声明队列 Configuration public class FanoutConfig {Beanpublic Queue objectQueue(){return new Queue("object.queue");} }运行消费者后&#xff1a; 2.发送消息 RunWith(SpringRunner.class) SpringBootTes…

01.爬虫---初识网络爬虫

01.初识网络爬虫 1.什么是网络爬虫2.网络爬虫的类型3.网络爬虫的工作原理4.网络爬虫的应用场景5.网络爬虫的挑战与应对策略6.爬虫的合法性总结 1.什么是网络爬虫 网络爬虫&#xff0c;亦称网络蜘蛛或网络机器人&#xff0c;是一种能够自动地、系统地浏览和收集互联网上信息的程…

物联网应用开发--STM32与机智云通信(ESP8266 Wi-Fi+手机APP+LED+蜂鸣器+SHT20温湿度传感器)

实现目标 1、熟悉机智云平台&#xff0c;会下载APP 2、熟悉新云平台创建产品&#xff0c;项目虚拟调试 3、掌握云平台生成MCU代码&#xff0c;并移植。机智云透传固件的下载 4、具体目标&#xff1a;&#xff08;1&#xff09;注册机智云平台&#xff1b;&#xff08;2&…

数据结构~~二叉树-堆

目录 一、基本概念 树的概念 二叉树-堆的概念 二、堆的结构 三、堆排序 向上调整建堆 向下调整建堆 四、TOP-K 五、完整代码 六、总结 一、基本概念 树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关…

在ubuntu中查询与某脚本或某设备相关的进程,ps,pgrep,lsof,fuser,pstree,htop命令的使用指南

一、查询与脚本有关的进程 1. 用ps命令 在 Ubuntu 系统中&#xff0c;如果你想查询与特定 Python 脚本 abc.py 相关的线程&#xff0c;你可以使用 ps 命令和 grep 命令结合来查找。ps 命令用于显示当前运行的进程状态&#xff0c;而 grep 命令可以帮助你过滤出包含指定字符串…

(六)DockerCompose安装与配置

DockerCompose简介 Compose 项目是 Docker 官方的开源项目&#xff0c;负责实现对 Docker 容器集群的快速编排。使用前面介绍的Dockerfile我们很容易定义一个单独的应用容器。然而在日常开发工作中&#xff0c;经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现…

Docker Desktop安装和如何在WSL2中使用Docker

最近在使用WSL的过程中&#xff0c;想使用docker遇到了一些问题&#xff0c;在WSL中安装Linux版本的docker&#xff0c;启动镜像之后不能从Windows机器的端口映射出来&#xff0c;查了一圈之后&#xff0c;发现应该使用Docker Desktop软件&#xff0c;下面是安装和使用的方式 …

error1310 写入文件时发生错误,请确认您是否有访问权限 也可能出现error 1304 :写入文件时出错

一般错误提示如下 error1310 Error writing to file 错误 1310 &#xff1a;写入文件时出错&#xff1a;请确认您有权访问该目录&#xff0c; error1304 Error writing to file 错误 1304 &#xff1a;写入文件时出错&#xff1a;请确认您有权访问该目录 1.首先我们退出所…

揭秘齿轮加工工艺的选用原则:精准打造高效传动的秘密武器

在机械制造领域&#xff0c;齿轮作为传动系统中的重要组成部分&#xff0c;其加工工艺的选择至关重要。不同的齿轮加工工艺会影响齿轮的精度、耐用性和效率。本文将通过递进式结构&#xff0c;深入探讨齿轮加工工艺的选用原则&#xff0c;带您了解如何精准打造高效传动的秘密武…

SpringBoot3.x + JDK21 整合 Mybatis-Plus

前言 SpringBoot3.0 开始最低要求 Java 17&#xff0c;虽然目前最新的版本为 JDK22&#xff0c;但是在官网上看到 JDK23 在今年9月又要发布了&#xff0c;感觉这 JDK 也有点太过于给力了 所以我们选择用目前的 LTS 版本 JDK21 就好了&#xff0c;不用追求最新的 springboot 版…

DOM【事件、操作节点、DOM案例】--学习JavaEE的day49

day49 JS核心技术 DOM 继day48 事件 键盘事件 监听器&#xff1a;onkeydown、onkeypress、onkeyup <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><input type"text&q…

网站工作原理

web发展史 1.0时代不可修改 2.0可修改&#xff0c;比如发微博 有以下问题&#xff1a; 课程2&#xff1a; 静态页面 html 动态页面 php 经过服务端的语言解释器&#xff0c;解析成html文件&#xff0c;剩下的就和静态流程一样 后面三个是web服务器&#xff0c;语言解释器&…

恶劣天候鲁棒三维目标检测论文整理

恶劣天候鲁棒三维目标检测论文整理 Sunshine to Rainstorm: Cross-Weather Knowledge Distillation for Robust 3D Object DetectionRobo3D: Towards Robust and Reliable 3D Perception against CorruptionsLossDistillNet: 3D Object Detection in Point Cloud Under Harsh W…

Android Low Storage机制之DeviceStorageMonitorService

一、Android 版本 Android 13 二、low storage简介(DeviceStorageMonitorService) 设备存储监视器服务是一个模块&#xff0c;主要用来&#xff1a; 1.监视设备存储&#xff08;“/ data”&#xff09;。 2.每60秒扫描一次免费存储空间(谷歌默认值) 3.当设备的存储空间不足…