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

news2024/11/26 12:49:45

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

✨ 本系列打算持续跟新华为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 += 1
        elif total == t:
            ans.append(arr[l:r])
            total -= arr[l]
            l += 1
            if r >= t:
                break
            else:
                total += arr[r]
                r += 1
        else:
            total += arr[r]
            r += 1
    
    ans.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.coloradmin.cn/o/1833675.html

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

相关文章

《EDA技术》十六选一数据选择器实验报告

摘 要&#xff1a; 本实验通过Quartus软件完成对十六选一数据选择器的四种VHDL程序&#xff0c;分别为if;case;when else;when select四种方式&#xff0c;实现波形图的生成。同时&#xff0c;加深对VHDL语言的理解和使用多种方式完成任务的能力&#xff0c;提高实验操作能力。…

[WTL/Win32]_[中级]_[MVP架构在实际项目中应用的地方]

场景 在开发Windows和macOS的界面软件时&#xff0c;Windows用的是WTL/Win32技术&#xff0c;而macOS用的是Cocoa技术。而两种技术的本地语言一个主打是C,另一个却是Object-c。界面软件的源码随着项目功能增多而增多&#xff0c;这就会给同步Windows和macOS的功能造成很大负担…

vue:对三种获取更新后的dom的方式进行分析

一、问题分析 由于vue的异步更新机制&#xff0c;我们在同步代码中是无法获取到更新后的dom的信息的 针对这个问题&#xff0c;我们有三种解决方案获取更新后的dom: 1.nextTick() 2.setTimeout() 3.在微任务中获取 因为更新是在同步任务结束后&#xff0c;执行微任务之前…

Java项目常用包的分层和作用

一个好的Java项目要有好的分层&#xff0c;不仅简洁明了&#xff0c;而且降低代码的耦合度&#xff0c;方便维护和升级。 web层 在Java Web应用程序中&#xff0c;Web层通常指的是处理HTTP请求和响应的层次&#xff0c;它直接与客户端&#xff08;通常是Web浏览器&#xff09…

【idea】gradle多模块构建项目内存溢出终止问题解决

背景 idea构建多模块项目&#xff0c;构建报错 Daemon is stopping immediately JVM garbage collector thrashing and after running out of JVM memory 解决 进到下图目录下 在文件管理中进入上面目录添加gradle.properties文件&#xff0c;内容如下 org.gradle.jvmargs-…

学校校园考场电子钟,同步授时,助力考场公平公正-讯鹏科技

随着教育技术的不断发展&#xff0c;学校对于考场管理的需求也日益提高。传统的考场时钟往往存在时间误差、维护不便等问题&#xff0c;这在一定程度上影响了考试的公平性和公正性。为了解决这些问题&#xff0c;越来越多的学校开始引入考场电子钟&#xff0c;通过同步授时技术…

【深度学习】GPT-2,Language Models are Unsupervised Multitask Learners,【语言建模】

论文&#xff1a;https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf 文章目录 摘要引言方法2.1 训练数据集2.2 输入表示2.3 模型3. 实验3.1 语言建模3.2 Children’s Book Test3.3 LAMBADA3.4 Winograd Sc…

兼容MacOS和FreeBSD软件包的开源ravynOS操作系统

ravynOS 是一个新型的操作系统项目&#xff0c;致力于在 x86-64&#xff08;终极目标是同时实现 ARM&#xff09;平台上提供与 macOS 类似的体验和兼容性。它基于坚若磐石的 FreeBSD、现有的开源代码和锦上添花的新代码构建。 主要设计目标&#xff1a; 与 macOS 应用程序的源…

python基础语法 002 - 4 字符串

1 字符串 字符串&#xff1a;引号括起来的数据类型 # 双引号 a "yuze wang"# 单引号 a ’yuze wang‘# 三引号 a ’‘’yuze‘‘’ a """yuze"""注意&#xff1a;所有格式表示都是半角&#xff0c;全角会报错 1.1 引号表示 …

C++及cmake语法介绍

c/cmake学习 文章目录 c/cmake学习1. c1.1 基本模型1.1.1 for循环1.1.2 main函数1.1.2 带参数函数编译函数 2. CMAKE2.1 相关命令2.1.1 编译基本命令2.1.2 动态库静态库编译2.1.3 消息输出2.1.4 cmake变量常见参数1. 设置构建类型2. 设置编译器标志3. 指定编译器4. 设置安装路径…

【PB案例学习笔记】-22制作一个语音朗读金额小应用

写在前面 这是PB案例学习笔记系列文章的第22篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gite…

计算机网络:3数据链路层

数据链路层 概述封装成帧和透明传输帧透明传输&#xff08;填充字节或比特&#xff09;差错检测奇偶校验循环冗余校验CRC Cyclic Redundancy Check 可靠传输停止-等待协议回退n帧协议&#xff08;滑动窗口协议&#xff09;选择重传协议 点对点协议PPP共享式以太网网络适配器&am…

Spring系统学习 -Spring IOC 的XML管理Bean之P命名空间、实现引入MySQL外部链接属性文件

P命名空间 在Spring框架中&#xff0c;P命名空间是一种用于简化XML配置文件中属性注入的方式。通过引入P命名空间&#xff0c;可以使用更简洁的语法来设置bean的属性值&#xff0c;而无需显式地使用<property>子元素。这使得XML配置文件更加简洁和易于阅读。 要在Sprin…

【vue3|第9期】Vue3中watch监视的深度解读

日期&#xff1a;2024年6月10日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

期末复习GGG-----查找子串

郭的 char *search( char *s, char *t ){int i0;while(s[i]){int j0;if(s[i]t[0]){while(s[ij]t[j]&&t[j]){j;}if(t[j]\0)return si;}i;}return NULL; } AI的 #include <stdio.h> #include <string.h> #define MAXS 30char *search(char *s, char *t);in…

Matlab使用Simulink仿真实现AM和BPSK信号的解调

前言 本篇实现了基于AM和BPSK调制的通信系统&#xff0c;采用Bernoulli Binary Generator生成随机二元序列&#xff0c;码元速率为0.5秒/个。AM调制使用Sine Wave模块生成载波&#xff0c;频率40Hz&#xff0c;相位π/2。BPSK调制通过Switch模块切换相位0和π的载波。信号传输…

红利之外的A股底仓选择:A50

内容提要 华泰证券指出&#xff0c;当前指数层面下行风险不大&#xff0c;市场再入震荡期下&#xff0c;可关注三条配置线索&#xff1a;1&#xff09;A50为代表的产业巨头&#xff1b;2&#xff09;以家电/食饮/物流/出版为代表的稳健消费龙头&#xff0c;3&#xff09;消费电…

使用 Iceberg、Tabular 和 MinIO 构建现代数据架构

现代数据环境需要一种新型的基础架构&#xff0c;即无缝集成结构化和非结构化数据、轻松扩展并支持高效的 AI/ML 工作负载的基础架构。这就是现代数据湖的用武之地&#xff0c;它为您的所有数据需求提供了一个中心枢纽。然而&#xff0c;构建和管理有效的数据湖可能很复杂。 这…

【离散化 二维差分】850. 矩形面积 II

本文涉及知识点 离散化 二维差分 LeetCode850. 矩形面积 II 给你一个轴对齐的二维数组 rectangles 。 对于 rectangle[i] [x1, y1, x2, y2]&#xff0c;其中&#xff08;x1&#xff0c;y1&#xff09;是矩形 i 左下角的坐标&#xff0c; (xi1, yi1) 是该矩形 左下角 的坐标…

物联网协议基础知识

协议允许节点以结构化的方式在它们之间进行交互。由于物联网设备的需求和用例在过去几年中迅速发展&#xff0c;协议也随之发展。总而言之&#xff0c;主要有两类协议&#xff1a;网络协议和数据协议。此分类来自广泛应用于 IT 通信网络的 OSI&#xff08;开放系统互连&#xf…