C++编程基础

编程题一

在这里插入图片描述

问题分析

题目要求使用 n 根小木棒,按照特定的方式排列,形成一个数字。具体规则如下:

  1. 每个数字由小木棒组成,例如:
    • 1 需要 2 根小木棒。
    • 0 需要 6 根小木棒。
    • 其他数字(如 2, 3, 4, 5, 6, 7, 8, 9)需要的木棒数分别为 5, 5, 5, 4, 5, 3, 7, 2
  2. 要求生成的数字中,0 不能位于最前端
  3. 在满足上述条件的情况下,找到使用 n 根小木棒能够形成的最小数字。

解题思路

为了生成最小的数字,我们需要遵循以下原则:

  1. 优先使用较少木棒的数字:例如,1 只需要 2 根木棒,是所有数字中使用木棒最少的,因此应该尽量多用 1
  2. 避免在最前端使用 0:如果剩余木棒不足以构成其他数字,可以考虑使用 0,但不能放在最前端。
  3. 贪心策略:从高位到低位依次选择能够使用的最小数字,直到用完所有的木棒。

实现步骤

  1. 定义每个数字所需的木棒数:创建一个数组或映射,存储每个数字对应的木棒数。
  2. 贪心构造数字
    • 从高位到低位,优先选择能够使用的最小数字。
    • 如果当前位无法使用 0(因为它是首位),则选择次小的数字。
    • 如果剩余木棒不足以构成任何数字,则结束构造。
  3. 输出结果:将构造好的数字输出。

C++ 代码实现

以下是完整的 C++ 代码实现:

#include <iostream>
#include <vector>
#include <string>
using namespace std;// 定义每个数字所需的木棒数
const vector<int> sticks = {6, 2, 5, 5, 4, 5, 6, 3, 7, 2};int main() {int n;cin >> n; // 输入木棒总数string result; // 存储最终结果// 构造数字while (n > 0) {bool found = false; // 标记是否找到合适的数字for (int digit = 0; digit <= 9; ++digit) {if (sticks[digit] <= n) {// 如果是第一位,不能使用 '0'if (result.empty() && digit == 0) continue;// 使用该数字result += ('0' + digit);n -= sticks[digit];found = true;break;}}// 如果找不到合适的数字,退出循环if (!found) break;}// 输出结果if (result.empty()) {cout << "-1" << endl; // 如果无法构造数字,输出 -1} else {cout << result << endl;}return 0;
}

代码解释

  1. 输入处理

    • 读取用户输入的木棒总数 n
  2. 贪心构造数字

    • 使用一个字符串 result 来存储构造的数字。
    • 从高位到低位,依次尝试使用数字 09
    • 如果当前位是第一位,不能使用 0,因此跳过。
    • 如果某个数字的木棒需求不超过剩余木棒数,则将其加入结果,并更新剩余木棒数。
    • 如果遍历完所有数字都无法找到合适的数字,则退出循环。
  3. 输出结果

    • 如果成功构造了数字,则输出结果。
    • 如果无法构造数字(例如木棒数不足),输出 -1

示例运行

输入:
10
输出:
1111
输入:
6
输出:
0
输入:
7
输出:
11

复杂度分析

  1. 时间复杂度

    • 每次尝试构造数字时,最多需要遍历 10 个数字(09),因此每次操作的时间复杂度为 (O(1))。
    • 总共需要进行 (O(n)) 次操作,其中 (n) 是木棒总数。
    • 因此,总时间复杂度为 (O(n))。
  2. 空间复杂度

    • 主要空间用于存储结果字符串和常量数组 sticks,空间复杂度为 (O(n))。

结论

该代码通过贪心策略,优先选择使用较少木棒的数字,并确保 0 不出现在最前端,从而构造出最小的数字。对于给定的木棒数 n,能够高效地计算出对应的最小数字。

编程题二

在这里插入图片描述

问题分析

题目要求根据整数 n 对 7 的余数,构造一个特定的数字 m。具体规则如下:

  1. 如果 n 是 7 的倍数,则 m 等于 n / 78
  2. 如果 n 除以 7 的余数为 1,则 m 是由若干个 8 组成的数字,前面加上 10
  3. 如果 n 除以 7 的余数为 2,则 m 是由若干个 8 组成的数字,前面加上 18
  4. 如果 n 除以 7 的余数为 3,则 m 是由若干个 8 组成的数字,前面加上 20
  5. 如果 n 除以 7 的余数为 4,则 m 是由若干个 8 组成的数字,前面加上 48
  6. 如果 n 除以 7 的余数为 5,则 m 是由若干个 8 组成的数字,前面加上 28
  7. 如果 n 除以 7 的余数为 6,则 m 是由若干个 8 组成的数字,前面加上 102

解题思路

  1. 计算 n 对 7 的余数:使用取模运算符 % 计算 n % 7
  2. 根据余数构造数字
    • 如果余数为 0,直接构造 n / 78
    • 如果余数不为 0,先根据余数确定前缀(如 10, 18, 20, 等),然后在后面追加 (n / 7)8
  3. 输出结果:将构造好的数字输出。

C++ 代码实现

以下是完整的 C++ 代码实现:

#include <iostream>
#include <string>
using namespace std;int main() {int n;cin >> n; // 输入整数 n// 计算 n 对 7 的余数int remainder = n % 7;// 构造数字 mstring prefix; // 前缀string suffix; // 后缀(由若干个 '8' 组成)// 根据余数确定前缀switch (remainder) {case 0:prefix = ""; // 如果是 7 的倍数,不需要前缀break;case 1:prefix = "10";break;case 2:prefix = "18";break;case 3:prefix = "20";break;case 4:prefix = "48";break;case 5:prefix = "28";break;case 6:prefix = "102";break;}// 计算后缀中 '8' 的数量int num_eights = n / 7;// 构造后缀for (int i = 0; i < num_eights; ++i) {suffix += '8';}// 拼接前缀和后缀string result = prefix + suffix;// 输出结果cout << result << endl;return 0;
}

代码解释

  1. 输入处理

    • 读取用户输入的整数 n
  2. 计算余数

    • 使用 n % 7 计算 n 对 7 的余数,并存储在变量 remainder 中。
  3. 根据余数确定前缀

    • 使用 switch 语句根据余数选择对应的前缀字符串(如 "10", "18", "20" 等)。
    • 如果余数为 0,说明 n 是 7 的倍数,此时前缀为空字符串。
  4. 构造后缀

    • 后缀由若干个 '8' 组成,其数量为 n / 7
    • 使用一个循环,将 '8' 追加到字符串 suffix 中。
  5. 拼接前缀和后缀

    • 将前缀和后缀拼接起来,形成最终的数字字符串 result
  6. 输出结果

    • 将构造好的数字字符串 result 输出。

示例运行

输入:
21
输出:
888
输入:
22
输出:
10888
输入:
28
输出:
8888
输入:
30
输出:
20888

复杂度分析

  1. 时间复杂度

    • 构造后缀时,需要遍历 n / 7 次,因此时间复杂度为 (O(n / 7)),可以简化为 (O(n))。
  2. 空间复杂度

    • 主要空间用于存储前缀和后缀字符串,空间复杂度为 (O(n))。

结论

该代码通过简单的数学运算和字符串操作,高效地实现了根据 n 的余数构造数字 m 的功能。对于给定的输入 n,能够正确输出对应的数字 m

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

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

相关文章

张量拼接操作

一.前言本章节来介绍一下张量拼接的操作&#xff0c;掌握torch.cat torch.stack使⽤&#xff0c;张量的拼接操作在神经⽹络搭建过程中是⾮常常⽤的⽅法&#xff0c;例如: 在后⾯将要学习到的残差⽹络、注意⼒机 制中都使⽤到了张量拼接。二.torch.cat 函数的使用torch.cat 函数…

Dify 连接本地 SpringAI MCP Server

Dify 连接本地 SpringAI MCP server 连接 MCP server 的方式大致有两种&#xff0c;一种是基于 stdio&#xff0c;一种是基于 sse&#xff0c;如果对于稳定和性能好的方案的话&#xff0c;sse 要比 stdio 好的多&#xff0c;所以本文采用的是基于 sse 和 Spring AI 部署本地 MC…

基于 Python 的数据分析技术综述

先说一点个人的看法“”MDX、OLAP&#xff08;Mondrian&#xff09;技术更适合构建面向业务用户的标准化分析产品&#xff0c;尤其当产品需要满足以下特点时&#xff1a;分析维度固定&#xff08;如时间、区域、产品类别&#xff09;&#xff1b;需支持高并发查询&#xff08;如…

Live555-RTSP服务器

RTSP Server创建 RTSP服务器初始化&#xff1a; RTSPServer::createNew->new RTSPServer::RTSPServer->GenericMediaServer::GenericMediaServer->turnOnBackgroundReadHandling(IPV4sock/IPV6sock,incomingConnectionHandlerIPv4)如上流程&#xff0c;创建RTSP服务器…

Redis Stack扩展功能

Redis JSONRedisJSON是Redis的一个扩展模块&#xff0c;它提供了对JSON数据的原生支持。常用操作&#xff1a;-- 设置一个JSON数据JSON.SET user $ {"name":"loulan","age":18}## key是user&#xff0c;value就是一个JSON数据。其中$表示JSON数据…

Takebishi旗下智能硬件网关产品devicegateway详细介绍

一、产品概述 DeviceGateway是由日本Takebishi公司研发的一款专业工业物联网&#xff08;IIoT&#xff09;硬件网关产品&#xff0c;专为实现现场工业设备与云端平台、IT系统之间的高效、安全数据传输而设计。作为一款可靠的硬件网关&#xff0c;DeviceGateway具有即插即用、稳…

单向链表反转 如何实现

单向链表反转的实现方法 ​ https://www.zhihu.com/question/441865393/answer/3208578798 ​ 单向链表反转是数据结构中的经典问题&#xff0c;在面试和实际开发中经常遇到。以下是 多种实现方式&#xff08;包括递归和迭代&#xff09;&#xff0c;以 Go 语言为例。1. 单向链…

php+vue+Laravel音乐媒体播放及周边产品运营平台-nodejs-计算机毕业设计

目录具体实现截图课程项目技术路线开发技术介绍设计思路流程PHP核心代码部分展示详细视频演示/源码获取##项目介绍网络技术的广泛应用显著地推动了生活服务的信息化进程。结合音乐流媒体与周边产品的运营需求&#xff0c;构建一套音乐媒体播放及周边产品运营平台&#xff0c;成…

Python爬虫实战:研究xlwt 和 xlrd 库相关技术

1. 引言 1.1 研究背景与意义 随着电子商务的快速发展,电商平台积累了海量的商品数据。如何从这些数据中提取有价值的信息,为商家提供决策支持,成为电商领域的重要研究方向。传统人工采集和分析数据的方式效率低下,且容易出现错误。自动化数据采集与分析系统能够通过爬虫技…

【QGC】深入解析 QGC 配置管理

引言 在软件开发中&#xff0c;配置管理是一项至关重要的任务&#xff0c;它能帮助我们灵活地管理应用程序的各种参数和设置。QGroundControl&#xff08;QGC&#xff09;作为一款强大的开源无人机地面站软件&#xff0c;其配置管理系统设计精巧&#xff0c;值得我们深入学习。…

ChatGPT,从规则到强化学习

要了解 ChatGPT&#xff08;Chat Generative Pre-training Transformer&#xff09;&#xff0c;我们不得不先看看 NLP 自然语言处理&#xff08;Natural Language Processing&#xff09;。因为 ChatGPT 属于 NLP 领域&#xff0c;而 NLP 则又是人工智能的一个分支。 那么什么…

【目标检测之Ultralytics预测框颜色修改】

在 Ultralytics YOLOv8 中修改预测框颜色为红色&#xff0c;以下是三种实用方案&#xff1a;方案 1&#xff1a;直接修改 plot() 方法的 colors 参数 在调用 results.plot() 时直接指定颜色参数&#xff1a; from ultralytics import YOLO# 加载模型 model YOLO("yolov8n…

让 VSCode 调试器像 PyCharm 一样显示 Tensor Shape、变量形状、变量长度、维度信息

文章目录&#x1f3af; 目标&#xff1a;在 VS Code 调试器中自动显示这些变量信息&#x1f50d; 原理简介⚠️ 其他方案的局限性❌ 方案一&#xff1a;重写 __repr__❌ 方案二&#xff1a;向 debugpy 注册自定义变量显示器&#xff08;StrPresentationProvider&#xff09;✅ …

pip国内镜像源一览

以下是2025年主流pip国内镜像源完整清单及配置指南&#xff0c;综合多个权威来源整理的最新数据&#xff1a;一、核心镜像源推荐&#xff08;2025年稳定可用&#xff09;‌阿里云镜像‌https://mirrors.aliyun.com/pypi/simple/优势&#xff1a;依托阿里云CDN&#xff0c;全国平…

当大模型遇见毫米波:用Wi-Fi信号做“透视”的室内语义SLAM实践——从CSI到神经辐射场的端到端开源方案

作者 | Blossom.118 2025-07-12 关键词&#xff1a;CSI-SLAM、神经辐射场、毫米波、Transformer、数字孪生、开源 ---- 1. 为什么要“无摄像头”语义SLAM&#xff1f; • 隐私红线&#xff1a;欧盟GDPR 2024修订版把“摄像头点云”列入高风险生物特征&#xff0c;落地成本高。…

脉冲神经网络膜电位泄漏系数学习:开启时空动态特征提取的新篇章

脉冲神经网络膜电位泄漏系数学习&#xff1a;开启时空动态特征提取的新篇章 摘要 脉冲神经网络&#xff08;Spiking Neural Networks, SNNs&#xff09;作为第三代神经网络模型&#xff0c;凭借其事件驱动、高生物逼真度和潜在的超低功耗特性&#xff0c;已成为类脑计算与高效人…

SSRF(ctfshow)

web351-358这部分的题目都是明文的&#xff0c;按照题目要求绕过就行了<?php error_reporting(0); highlight_file(__FILE__); $url$_POST[url]; $xparse_url($url); if($x[scheme]http||$x[scheme]https){ if(!preg_match(/localhost|127\.0\.|\。/i, $url)){ $chcurl_ini…

亚矩阵云手机:重构物流供应链,让跨境包裹“飞”得更快更准

在跨境电商“时效即生命”的竞争中&#xff0c;物流信息滞后、清关效率低下、成本居高不下已成为商家最头疼的“三座大山”。传统模式下&#xff0c;人工更新物流状态耗时易错&#xff0c;跨境包裹常因清关延误遭客户投诉&#xff0c;而高昂的物流成本更直接吞噬利润。亚矩阵云…

HTML(5) 代码规范

HTML(5) 代码规范 引言 HTML(HyperText Markup Language)是一种用于创建网页的标准标记语言。HTML5 作为最新的 HTML 标准,自 2014 年正式发布以来,已经成为了构建现代网页应用的基础。本文将详细介绍 HTML5 代码规范,包括结构、语法、属性以及最佳实践等内容,旨在帮助…

【PTA数据结构 | C语言版】顺序栈的3个操作

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 请编写程序&#xff0c;将 n1 个整数顺序压入容量为 n 的栈&#xff0c;随后执行 n1 次取顶并出栈的操作。 输入格式&#xff1a; 输入首先在第一行给出正整数 n&#xff08;≤10^4 &#xff09;&a…