【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 内存访问热度分析(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📎在线评测链接

整数的连续自然数之和表示(100分)

🌍 评测功能需要 订阅专栏 后私信联系清隆解锁~

🍓OJ题目截图

在这里插入图片描述

文章目录

    • 📎在线评测链接
    • 🍓OJ题目截图
    • 🍰 整数的连续自然数之和表示
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入1
      • 样例输出1
      • 样例输入2
      • 样例输出2
      • 数据范围
      • 题解
      • 参考代码

🍰 整数的连续自然数之和表示

问题描述

给定一个正整数 T T T,请找出所有用连续自然数之和来表示 T T T 的方案。例如,整数 9 9 9 可以表示为: 9 = 9 9 = 9 9=9 9 = 4 + 5 9 = 4 + 5 9=4+5 9 = 2 + 3 + 4 9 = 2 + 3 + 4 9=2+3+4。你的任务是按照以下要求,输出所有表示 T T T 的方案:

  1. 优先输出自然数个数最少的表达式。
  2. 每个表达式中的自然数按照递增顺序输出。
  3. 最后输出表达式的总数。

输入格式

输入一个正整数 T T T

输出格式

按照题目要求,输出所有表示 T T T 的方案,每个方案占一行。最后一行输出 Result:X,其中 X X X 表示方案总数。

样例输入1

9

样例输出1

9=9
9=4+5
9=2+3+4
Result:3

样例输入2

10

样例输出2

10=10
10=1+2+3+4
Result:2

数据范围

1 ≤ T ≤ 1000 1 \le T \le 1000 1T1000

题解

本题可以使用双指针滑动窗口的思路来解决。我们可以用两个指针 l l l r r r 分别表示当前连续自然数区间的左右端点,用变量 t o t a l total total 维护区间 [ l , r ] [l,r] [l,r] 内所有数的和。

初始时, l = 0 l=0 l=0 r = 1 r=1 r=1 t o t a l = a r r [ l ] total=arr[l] total=arr[l],其中 a r r arr arr 是从 1 1 1 T T T 的所有自然数组成的数组。

接下来,我们不断移动指针 r r r,并更新 t o t a l total total 的值,直到 t o t a l ≥ T total \ge T totalT。此时,如果 t o t a l = T total=T total=T,说明我们找到了一个合法的表达式,将 a r r [ l , r ] arr[l,r] arr[l,r] 加入答案数组中。然后我们将 l l l 右移一位,并相应地减少 t o t a l total total 的值,继续寻找下一个表达式。

l l l 超过 T T T 时,搜索结束。最后,我们将答案数组按照自然数个数从小到大排序,并按要求输出每个表达式即可。

时间复杂度 O ( T 2 ) O(T^2) O(T2),空间复杂度 O ( T ) O(T) O(T)

参考代码

  • Python
t = int(input())def getResult():arr = [i + 1 for i in range(t)]ans = []l, r, total = 0, 1, arr[0]while l < t:if total > t:total -= arr[l]l += 1elif total == t:ans.append(arr[l:r])total -= arr[l]l += 1if r >= t:breakelse:total += arr[r]r += 1else:total += arr[r]r += 1ans.sort(key=lambda x: len(x))for an in ans:print(f"{t}={'+'.join(map(str, an))}")print(f"Result:{len(ans)}")getResult()
  • Java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int t = sc.nextInt();getResult(t);}public static void getResult(int t) {List<int[]> ans = new ArrayList<>();int[] arr = new int[t];for (int i = 0; i < t; i++) {arr[i] = i + 1;}int l = 0, r = 1, total = arr[0];while (l < t) {if (total > t) {total -= arr[l];l++;} else if (total == t) {int[] exp = new int[r - l];for (int i = l; i < r; i++) {exp[i - l] = arr[i];}ans.add(exp);total -= arr[l];l++;if (r >= t) {break;} else {total += arr[r];r++;}} else {total += arr[r];r++;}}ans.sort((a, b) -> a.length - b.length);for (int[] an : ans) {StringBuilder sb = new StringBuilder();sb.append(t).append("=");for (int i = 0; i < an.length; i++) {sb.append(an[i]);if (i < an.length - 1) {sb.append("+");}}System.out.println(sb);}System.out.println("Result:" + ans.size());}
}
  • Cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;void getResult(int t) {vector<vector<int>> ans;vector<int> arr(t);for (int i = 0; i < t; i++) {arr[i] = i + 1;}int l = 0, r = 1, total = arr[0];while (l < t) {if (total > t) {total -= arr[l];l++;} else if (total == t) {ans.push_back(vector<int>(arr.begin() + l, arr.begin() + r));total -= arr[l];l++;if (r >= t) {break;} else {total += arr[r];r++;}} else {total += arr[r];r++;}}sort(ans.begin(), ans.end(), [](const vector<int>& a, const vector<int>& b) {return a.size() < b.size();});for (auto& an : ans) {cout << t << "=";for (int i = 0; i < an.size(); i++) {cout << an[i];if (i < an.size() - 1) {cout << "+";}}cout << endl;}cout << "Result:" << ans.size() << endl;
}int main() {int t;cin >> t;getResult(t);return 0;
}

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

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

相关文章

windows环境下,怎么查看本机的IP、MAC地址和端口占用情况

1.输入ipconfig,按回车。即查看了IP地址&#xff0c;子码掩码&#xff0c;网关信息。 2.输入ipconfig/all,按回车。即查看了包含IP地址&#xff0c;子码掩码&#xff0c;网关信息以及MAC地址 3.我们有时在启动应用程序的时候提示端口被占用&#xff0c;如何知道谁占有了我们需要…

Vue57-组件的自定义事件_解绑

给谁绑的自定义事件&#xff0c;就找谁去触发&#xff1b;给谁绑的自定义事件&#xff0c;就找谁去解绑&#xff1b; 一、解绑自定义事件 1-1、解绑一个自定义事件 到student.vue组件中去解绑。 1-2、解绑多个自定义事件 使用数组来解绑多个。 1-3、解绑所有的自定义事件 二、…

Android Studio无法连接夜神模拟器的解决方案

一、AS检测不到夜神模拟器 1、问题描述 在按照教程【如何安装和使用Android夜神模拟器】进入夜神的bin目录&#xff0c;输入连接命令回车后&#xff0c;终端显示的already connected to 127.0.0.1:62001&#xff0c;但是AS的Running Devices并没有显示夜神模拟器。 2、解决方…

Arm和高通的法律之争将扰乱人工智能驱动的PC浪潮

Arm和高通的法律之争将扰乱人工智能驱动的PC浪潮 科技行业高管和专家表示&#xff0c;两大科技巨头之间长达两年的法律大战可能会扰乱人工智能驱动的新一代个人电脑浪潮。 上周&#xff0c;来自微软(Microsoft)、华硕(Asus)、宏碁(Acer)、高通(Qualcomm)等公司的高管在台北举行…

计算机毕业设计Python+Vue.js知识图谱音乐推荐系统 音乐爬虫可视化 音乐数据分析 大数据毕设 大数据毕业设计 机器学习 深度学习 人工智能

开发技术 协同过滤算法、机器学习、LSTM、vue.js、echarts、django、Python、MySQL 创新点协同过滤推荐算法、爬虫、数据可视化、LSTM情感分析、短信、身份证识别 补充说明 适合大数据毕业设计、数据分析、爬虫类计算机毕业设计 介绍 音乐数据的爬取&#xff1a;爬取歌曲、…

深度学习推理显卡设置

深度学习推理显卡设置 进入NVIDIA控制面板&#xff0c;选择 “管理3D设置”设置 "低延时模式"为 "“超高”"设置 “电源管理模式” 为 “最高性能优先” 使用锁频来获得稳定的推理 法一&#xff1a;命令行操作 以管理员身份打开CMD查看GPU核心可用频率&…

云计算 | (四)基本云安全

文章目录 📚基本云安全🐇云安全背景🐇基本术语和概念⭐️风险(risk)⭐️安全需求🐇威胁作用者⭐️威胁作用者(threat agent)⭐️匿名攻击者(anonymous attacker)⭐️恶意服务作用者(malicious service agent)⭐️授信的攻击者(trusted attacker)⭐️恶意的内部人员(mal…

有趣且重要的JS知识合集(22)树相关的算法

0、举例&#xff1a;树形结构原始数据 1、序列化树形结构 /*** 平铺序列化树形结构* param tree 树形结构* param result 转化后一维数组* returns Array<TreeNode>*/ export function flattenTree(tree, result []) {if (tree.length 0) {return result}for (const …

开发一个python工具,pdf转图片,并且截成单个图片,然后修整没用的白边

今天推荐一键款本人开发的pdf转单张图片并截取没有用的白边工具 一、开发背景&#xff1a; 业务需要将一个pdf文件展示在前端显示&#xff0c;但是基于各种原因&#xff0c;放弃了h5使用插件展示 原因有多个&#xff0c;文件资源太大加载太慢、pdf展示兼容性问题、pdf展示效果…

CSDN 自动上传图片并优化Markdown的图片显示

文章目录 完整代码一、上传资源二、替换 MD 中的引用文件为在线链接参考 完整代码 完整代码由两个文件组成&#xff0c;upload.py 和 main.py&#xff0c;放在同一目录下运行 main.py 就好&#xff01; # upload.py import requests class UploadPic: def __init__(self, c…

力扣每日一题 6/17 枚举+双指针

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 522.最长特殊序列II【中等】 题目&#xff1a; 给定字符串列表 strs &…

【Ubuntu通用压力测试】Ubuntu16.04 CPU压力测试

使用 stress 对CPU进行压力测试 我也是一个ubuntu初学者&#xff0c;分享是Linux的优良美德。写的不好请大佬不要喷&#xff0c;多谢支持。 sudo apt-get update 日常先更新再安装东西不容易出错 sudo apt-get upgrade -y 继续升级一波 sudo apt-get install -y linux-tools…

Stable Diffusion文生图模型训练入门实战(完整代码)

Stable Diffusion 1.5&#xff08;SD1.5&#xff09;是由Stability AI在2022年8月22日开源的文生图模型&#xff0c;是SD最经典也是社区最活跃的模型之一。 以SD1.5作为预训练模型&#xff0c;在火影忍者数据集上微调一个火影风格的文生图模型&#xff08;非Lora方式&#xff…

Python | Leetcode Python题解之第162题寻找峰值

题目&#xff1a; 题解&#xff1a; class Solution:def findPeakElement(self, nums: List[int]) -> int:n len(nums)# 辅助函数&#xff0c;输入下标 i&#xff0c;返回 nums[i] 的值# 方便处理 nums[-1] 以及 nums[n] 的边界情况def get(i: int) -> int:if i -1 or…

STM32单片机DMA存储器详解

文章目录 1. DMA概述 2. 存储器映像 3. DMA框架图 4. DMA请求 5. 数据宽度与对齐 6. DMA数据转运 7. ADC扫描模式和DMA 8. 代码示例 1. DMA概述 DMA&#xff08;Direct Memory Access&#xff09;可以直接访问STM32内部的存储器&#xff0c;DMA是一种技术&#xff0c;…

【 ARMv8/ARMv9 硬件加速系列 3.5.1 -- SVE 谓词寄存器有多少位?】

文章目录 SVE 谓词寄存器(predicate registers)简介SVE 谓词寄存器的位数SVE 谓词寄存器对向量寄存器的控制SVE 谓词寄存器位数计算SVE 谓词寄存器小结SVE 谓词寄存器(predicate registers)简介 ARMv9的Scalable Vector Extension (SVE) 引入了谓词寄存器(Predicate Register…

打造工业操作系统开源开放体系

我国制造业具有细分行业、领域众多&#xff0c;产品丰富&#xff0c;制造模式多样等特点&#xff0c;围绕以工业操作系统为核心的工业软件赋能体系建设&#xff0c;离不开平台运营商、工业软件开发商、系统服务商、科研机构、工业企业等多方联合参与。聚众同行、聚力创新&#…

【数据库系统概论复习】关系数据库与关系代数笔记

文章目录 基本概念数据库基本概念关系数据结构完整性约束 关系代数关系代数练习课堂练习 语法树 基本概念 数据库基本概念 DB 数据库&#xff0c; 为了存用户的各种数据&#xff0c;我们要建很多关系&#xff08;二维表&#xff09;&#xff0c;所以把相关的关系&#xff08;二…

创建型模式--抽象工厂模式

产品族创建–抽象工厂模式 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题。 但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,可以考虑将一些相关的产品组成一个“产品族”,…

Java基础16(集合 List)

目录 一、什么是集合&#xff1f; 二、集合接口 三、List集合 1. ArrayList容器类 1.1 常用方法 1.1.1 增加 1.1.2 查找 int size() E get(int index) int indexOf(Object c) boolean contains(Object c) boolean isEmpty() List SubList(int fromindex,i…