7-9 乘法口訣數列

本題要求你從任意給定的兩個 1 位數字 a1? 和 a2? 開始,用乘法口訣生成一個數列 {an?},規則為從 a1? 開始順次進行,每次將當前數字與后面一個數字相乘,將結果貼在數列末尾。如果結果不是 1 位數,則其每一位都應成為數列的一項。

輸入格式:

輸入在一行中給出 3 個整數,依次為 a1?、a2? 和 n,滿足 0≤a1?,a2?≤9,0<n≤103。

輸出格式:

在一行中輸出數列的前 n 項。數字間以 1 個空格分隔,行首尾不得有多余空格。

輸入樣例:

2 3 10

輸出樣例:

2 3 6 1 8 6 8 4 8 4

樣例解釋:

數列前 2 項為 2 和 3。從 2 開始,因為 2×3=6,所以第 3 項是 6。因為 3×6=18,所以第 4、5 項分別是 1、8。依次類推…… 最后因為第 6 項有 6×8=48,對應第 10、11 項應該是 4、8。而因為只要求輸出前 10 項,所以在輸出 4 后結束。

# 讀取輸入的 a1, a2 和 n
a1, a2, n = map(int, input().split())# 特殊情況處理:如果 n 為 1,直接輸出 a1
if n == 1:print(a1)
# 如果 n 為 2,直接輸出 a1 和 a2
elif n == 2:print(f"{a1} {a2}")
else:# 初始化數列,包含前兩項sequence = [a1, a2]# 用于記錄當前參與乘法運算的索引index = 0# 當數列長度小于 n 時,繼續生成新的項while len(sequence) < n:# 計算當前兩項的乘積product = sequence[index] * sequence[index + 1]# 將乘積轉換為字符串,方便按位處理product_str = str(product)# 遍歷乘積的每一位for digit in product_str:# 將每一位數字添加到數列中sequence.append(int(digit))# 如果數列長度達到 n,停止添加if len(sequence) == n:break# 移動到下一組參與乘法運算的項index += 1# 輸出數列的前 n 項,用空格分隔print(" ".join(map(str, sequence)))

綜上所述,這段代碼通過對?n?的不同情況進行處理,實現了根據給定的前兩項?a1?和?a2?生成乘法口訣數列并輸出前?n?項的功能。

temp[++temp_len] = 0;前置自增運算符?++?會先將?temp_len?的值加?1,然后返回加?1?后的值。將數字?0?賦值給?temp[1],即?temp[1] = 0;

temp[temp_len++] = 0;由于后置自增操作符?++?的特性,它會先返回?temp_len?的當前值,然后再將?temp_len?的值加?1。將數字?0?賦值給?temp[0],即?temp[0] = 0;

  • input():這是 Python 的內置函數,用于從標準輸入(通常是鍵盤)讀取用戶輸入的一行內容,返回的是一個字符串。
  • split():字符串對象的方法,用于將字符串按空格分割成多個子字符串,并返回一個包含這些子字符串的列表。例如,若用戶輸入?2 3 10input().split()?會得到?['2', '3', '10']
  • map(int, ...)map?函數會將?int?這個函數應用到傳入的可迭代對象(這里是?input().split()?返回的列表)的每個元素上,將列表中的每個字符串元素轉換為整數。所以?map(int, input().split())?會把?['2', '3', '10']?轉換為包含整數?23?和?10?的一個可迭代對象。
  • a1, a2, n = ...:使用解包賦值,將可迭代對象中的三個整數分別賦值給變量?a1a2?和?n。其中?a1?和?a2?是數列的前兩項,n?是需要輸出的數列項數。
  • if n == 1::判斷?n?是否等于 1,如果是,則直接使用?print?函數輸出?a1,因為此時只需要輸出數列的第一項。
  • elif n == 2::如果?n?不等于 1,繼續判斷?n?是否等于 2。如果是,則使用 f-string 格式化字符串,將?a1?和?a2?用空格連接起來并輸出,這是因為此時需要輸出數列的前兩項。
  • else::如果?n?既不等于 1 也不等于 2,說明需要按照常規邏輯生成數列。
  • sequence = [a1, a2]:初始化一個列表?sequence,并將?a1?和?a2?作為列表的前兩個元素,這個列表用于存儲生成的數列。
  • index = 0:初始化一個變量?index?為 0,用于記錄當前參與乘法運算的元素在?sequence?列表中的索引。
  • while len(sequence) < n::使用?while?循環,只要?sequence?列表的長度小于?n,就繼續循環,以不斷生成新的數列項。
  • product = sequence[index] * sequence[index + 1]:計算?sequence?列表中當前索引?index?對應的元素和下一個元素的乘積,將結果存儲在?product?變量中。
  • product_str = str(product):將乘積?product?轉換為字符串類型,這樣可以方便地按位處理。
  • for digit in product_str::遍歷乘積字符串?product_str?中的每一個字符。
  • sequence.append(int(digit)):將遍歷到的字符轉換為整數,并添加到?sequence?列表的末尾。
  • if len(sequence) == n::判斷?sequence?列表的長度是否達到了?n,如果達到了,則使用?break?語句跳出內層的?for?循環,停止添加新元素。
  • index += 1:將?index?加 1,以便在下一次循環中計算下一組相鄰元素的乘積。
  • print(" ".join(map(str, sequence))):使用?map(str, sequence)?將?sequence?列表中的每個整數元素轉換為字符串,然后使用?" ".join(...)?方法將這些字符串用空格連接起來,最后使用?print?函數輸出連接后的字符串。
可以將 `int temp[4];` 改為 `int temp[3];`。下面來詳細分析原因:### 數組用途分析
在代碼里,`temp` 數組的作用是臨時存儲兩個一位數相乘結果的每一位數字。由于輸入的 `a1` 和 `a2` 滿足 `0 ≤ a1, a2 ≤ 9`,那么它們相乘的結果范圍是 `0` 到 `81`(`9 * 9 = 81`)。### 結果位數分析
- 當乘積為 `0` 時,結果是一位數。
- 當乘積在 `1` 到 `9` 之間時,結果同樣是一位數。
- 當乘積在 `10` 到 `81` 之間時,結果是兩位數。所以,兩個一位數相乘的結果最多是兩位數,再考慮到可能為 `0` 這種特殊情況,存儲乘積每一位數字最多需要 `3` 個元素的數組就足夠了,即 `int temp[3];` 是可行的。### 代碼修改示例
以下是將 `int temp[4];` 改為 `int temp[3];` 后的完整代碼:
```c
#include <stdio.h>#define MAX_N 1000int main() {int a1, a2, n;// 讀取輸入的 a1, a2 和 nscanf("%d %d %d", &a1, &a2, &n);int sequence[MAX_N];// 初始化數列的前兩項sequence[0] = a1;sequence[1] = a2;int len = 2;  // 當前數列的長度int index = 0;  // 用于記錄當前參與乘法運算的索引// 當數列長度小于 n 時,繼續生成新的項while (len < n) {int product = sequence[index] * sequence[index + 1];int temp[3];  // 臨時存儲乘積的每一位數字,因為最大 9*9 = 81,最多兩位int temp_len = 0;// 處理乘積的每一位if (product == 0) {temp[temp_len++] = 0;} else {while (product > 0) {temp[temp_len++] = product % 10;product /= 10;}}// 反轉存儲的數字,使其順序正確for (int i = temp_len - 1; i >= 0; i--) {sequence[len++] = temp[i];if (len == n) {break;}}index++;}// 輸出數列的前 n 項,用空格分隔for (int i = 0; i < n; i++) {if (i > 0) {printf(" ");}printf("%d", sequence[i]);}printf("\n");return 0;
}
```
這樣修改之后,代碼的功能不會受到影響,同時還能減少不必要的內存開銷。 

vector?是 C++ 標準模板庫(STL)中的一個容器類,它表示一個動態數組。與傳統的 C 數組相比,vector?具有以下優點:

  • 動態大小vector?可以在運行時動態地改變其大小,你可以根據需要添加或刪除元素,而不需要在創建時指定固定的大小。
  • 自動內存管理vector?會自動管理其內部的內存,當元素數量增加時,它會自動分配更多的內存;當元素數量減少時,它會自動釋放不再使用的內存,避免了手動管理內存帶來的復雜性和潛在的內存泄漏問題。
  • 豐富的操作方法vector?提供了一系列方便的成員函數,如?push_back()?用于在末尾添加元素、pop_back()?用于刪除末尾元素、size()?用于獲取元素數量等,使對數組的操作更加方便和高效。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67906.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67906.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67906.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

20250202在Ubuntu22.04下使用Guvcview錄像的時候降噪

20250202在Ubuntu22.04下使用Guvcview錄像的時候降噪 2025/2/2 21:25 聲卡&#xff1a;筆記本電腦的攝像頭自帶的【USB接口的】麥克風。沒有外接3.5mm接口的耳機。 緣起&#xff1a;在安裝Ubuntu18.04/20.04系統的筆記本電腦中直接使用Guvcview錄像的時候底噪很大&#xff01; …

使用React和Material-UI構建TODO應用的前端UI

使用React和Material-UI構建TODO應用的前端UI 引言環境準備代碼解析1. 導入必要的模塊2. 創建React組件3. 定義函數3.1 獲取TODO列表3.2 創建TODO項3.3 更新TODO項3.4 刪除TODO項3.5 處理編輯點擊事件3.6 關閉編輯對話框3.7 保存編輯內容 4. 使用Effect鉤子5. 渲染組件 功能實現…

藍橋杯思維訓練營(三)

文章目錄 題目詳解680.驗證回文串 II30.魔塔游戲徒步旅行中的補給問題觀光景點組合得分問題 題目詳解 680.驗證回文串 II 680.驗證回文串 II 思路分析&#xff1a;這個題目的關鍵就是&#xff0c;按照正常來判斷對應位置是否相等&#xff0c;如果不相等&#xff0c;那么就判…

重生之我在異世界學編程之C語言:深入指針篇(上)

大家好&#xff0c;這里是小編的博客頻道 小編的博客&#xff1a;就愛學編程 很高興在CSDN這個大家庭與大家相識&#xff0c;希望能在這里與大家共同進步&#xff0c;共同收獲更好的自己&#xff01;&#xff01;&#xff01; 本文目錄 引言正文&#xff08;1&#xff09;內置數…

密碼學的數學基礎1-素數和RSA加密

數學公式推導是密碼學的基礎, 故開一個新的課題 – 密碼學的數學基礎系列 素數 / 質數 質數又稱素數。 一個大于1的自然數&#xff0c;除了1和它自身外&#xff0c;不能被其他自然數整除的數叫做質數&#xff1b;否則稱為合數&#xff08;規定1既不是質數也不是合數&#xff0…

kamailio源文件modules.lst的內容解釋

在執行make cfg 后&#xff0c;在kamailio/src目錄下有一個文件modules.lst&#xff0c;內容如下&#xff1a; # this file is autogenerated by make modules-cfg# the list of sub-directories with modules modules_dirs:modules# the list of module groups to compile cf…

音視頻入門基礎:RTP專題(7)——RTP協議簡介

一、引言 本文對RTP協議進行簡介。在簡介之前&#xff0c;請各位先下載RTP的官方文檔《RFC 3550》和《RFC 3551》。《RFC 3550》總共有89頁&#xff0c;《RFC 3551》總共有44頁。本文下面所說的“頁數”是指在pdf閱讀器中顯示的頁數&#xff1a; 二、RTP協議簡介 根據《RFC 35…

HTTP協議的無狀態和無連接

無連接 ①無連接的含義 這里所說的無連接并不是指不連接&#xff0c;客戶與服務器之間的HTTP連接是一種一次性連接&#xff0c;它限制每次連接只處理一個請求&#xff0c;當服務器返回本次請求的應答后便立即關閉連接&#xff0c;下次請求再重新建立連接。這種一次性連接主要考…

Java知識速記:Lambda表達式

Java知識速記&#xff1a;Lambda表達式 一、什么是Lambda表達式&#xff1f; Lambda表達式是Java 8引入的一種簡潔的表示函數式接口的方法&#xff0c;它使得可以將函數作為參數傳遞&#xff0c;并且可以在代碼中以更簡潔的方式實現函數式編程。Lambda表達式的基本語法如下&a…

第31章 星騙計劃的推進與團隊協作

我回到自己的辦公室&#xff0c;在座位上剛坐下沒多久&#xff0c;還沒來得及好好整理一下思緒&#xff0c;就聽到一陣敲門聲。“請進。” 我抬頭說道&#xff0c;聲音中帶著一絲疲憊。借助情緒監測系統&#xff0c;我察覺到自己的壓力指數正處于高位&#xff0c;于是暗自提醒自…

半導體器件與物理篇7 微波二極管、量子效應和熱電子器件

基本微波技術 微波頻率&#xff1a;微波頻率涵蓋約從0.1GHz到3000GHz&#xff0c;相當于波長從300cm到0.01cm。 分布效應&#xff1a;電子部件在微波頻率&#xff0c;與其在較低頻率的工作行為不同。 輸運線&#xff1a;一個由電阻、電容、電感三種等效基本電路部件所組成的…

【C++】B2122 單詞翻轉

博客主頁&#xff1a; [小????????] 本文專欄: C 文章目錄 &#x1f4af;前言&#x1f4af;題目描述輸入格式輸出格式樣例 #1樣例輸入 #1樣例輸出 #1 &#x1f4af;一、我的做法代碼實現&#xff1a;代碼解析思路分析 &#x1f4af;二、老師的第一種做法代碼實現&a…

麥芯(MachCore)應用開發教程5 --- 工位和晶圓傳輸

麥芯是構建在windows系統上的設備應用操作系統&#xff0c;利用該系統可以快速高效的開發一款設備專用軟件。希望進一步了解請email: acloud163.com 黃國強 2025/02/03 一、工位與子設備的關系 想象工廠中的流水線工作站&#xff0c;每個工位&#xff08;Station&#xff09…

Python從0到100(八十七):CNN網絡詳細介紹及WISDM數據集模型仿真

前言&#xff1a; 零基礎學Python&#xff1a;Python從0到100最新最全教程。 想做這件事情很久了&#xff0c;這次我更新了自己所寫過的所有博客&#xff0c;匯集成了Python從0到100&#xff0c;共一百節課&#xff0c;幫助大家一個月時間里從零基礎到學習Python基礎語法、Pyth…

C++ Primer 迭代器

歡迎閱讀我的 【CPrimer】專欄 專欄簡介&#xff1a;本專欄主要面向C初學者&#xff0c;解釋C的一些基本概念和基礎語言特性&#xff0c;涉及C標準庫的用法&#xff0c;面向對象特性&#xff0c;泛型特性高級用法。通過使用標準庫中定義的抽象設施&#xff0c;使你更加適應高級…

【C++篇】位圖與布隆過濾器

目錄 一&#xff0c;位圖 1.1&#xff0c;位圖的概念 1.2&#xff0c;位圖的設計與實現 1.5&#xff0c;位圖的應用舉例 1.4&#xff0c;位圖常用應用場景 二&#xff0c;布隆過濾器 2.1&#xff0c;定義&#xff1a; 2.2&#xff0c;布隆過濾器的實現 2.3&#xff0c; 應…

VR觸感數據手套:觸感反饋賦予虛擬交互沉浸式體驗

隨著動作捕捉技術的蓬勃發展&#xff0c;動捕數據手套成為了手部動作捕捉與虛擬交互的便捷工具&#xff0c;為人們打開了通往虛擬世界的新大門。在眾多產品中&#xff0c;mHand Pro作為一款多功能兼具的VR動作捕捉數據手套&#xff0c;憑借其卓越的性能&#xff0c;在手部動作捕…

C# 結構體介紹

.NET學習資料 .NET學習資料 .NET學習資料 一、結構體的定義與基本使用 &#xff08;一&#xff09;定義結構體 在 C# 中&#xff0c;使用struct關鍵字來創建結構體。它就像是一個模板&#xff0c;能定義出符合特定需求的數據結構。比如&#xff0c;若要跟蹤圖書館中書的信息…

圖像噪聲處理技術:讓圖像更清晰的藝術

在這個數字化時代&#xff0c;圖像作為信息傳遞的重要載體&#xff0c;其質量直接影響著我們的視覺體驗和信息解讀。然而&#xff0c;在圖像采集、傳輸或處理過程中&#xff0c;難免會遇到各種噪聲干擾&#xff0c;如高斯噪聲、椒鹽噪聲等&#xff0c;這些噪聲會降低圖像的清晰…

追逐低空經濟,無人機研學技術詳解

追逐低空經濟&#xff0c;無人機研學技術成為了一個備受關注的領域。以下是對無人機研學技術的詳細解析&#xff1a; 一、無人機研學技術概述 無人機研學技術是以無人機為核心&#xff0c;結合航空科技、電子技術、機械原理等多領域知識的一種教育實踐活動。它旨在通過理論學習…