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
英文地址,請注明出處:http://en.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…