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.mzph.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; …

蓝桥杯思维训练营(三)

文章目录 题目详解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…

音视频入门基础:RTP专题(7)——RTP协议简介

一、引言 本文对RTP协议进行简介。在简介之前&#xff0c;请各位先下载RTP的官方文档《RFC 3550》和《RFC 3551》。《RFC 3550》总共有89页&#xff0c;《RFC 3551》总共有44页。本文下面所说的“页数”是指在pdf阅读器中显示的页数&#xff1a; 二、RTP协议简介 根据《RFC 35…

半导体器件与物理篇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;在手部动作捕…

追逐低空经济,无人机研学技术详解

追逐低空经济&#xff0c;无人机研学技术成为了一个备受关注的领域。以下是对无人机研学技术的详细解析&#xff1a; 一、无人机研学技术概述 无人机研学技术是以无人机为核心&#xff0c;结合航空科技、电子技术、机械原理等多领域知识的一种教育实践活动。它旨在通过理论学习…

(done) MIT6.S081 2023 学习笔记 (Day7: LAB6 Multithreading)

网页&#xff1a;https://pdos.csail.mit.edu/6.S081/2023/labs/thread.html (任务1教会了你如何用 C 语言调用汇编&#xff0c;编译后链接即可) 任务1&#xff1a;Uthread: switching between threads (完成) 在这个练习中&#xff0c;你将设计一个用户级线程系统中的上下文切…

Kubernetes学习之通过Service访问Pod

一、基础概述 1.当通过deployment等controller动态创建和销毁pod使得每个pod都有自己的ip地址&#xff0c;当controller用新的pod替代发生故障的pod时&#xff0c;新的pod会分配到新的ip地址&#xff0c;那么客户端如何稳定的找到并访问pod提供的服务。 2.创建service service从…

【优先算法】专题——前缀和

目录 一、【模版】前缀和 参考代码&#xff1a; 二、【模版】 二维前缀和 参考代码&#xff1a; 三、寻找数组的中心下标 参考代码&#xff1a; 四、除自身以外数组的乘积 参考代码&#xff1a; 五、和为K的子数组 参考代码&#xff1a; 六、和可被K整除的子数组 参…

CDDIS从2025年2月开始数据迁移

CDDIS 将从 2025 年 2 月开始将我们的网站从 cddis.nasa.gov 迁移到 earthdata.nasa.gov&#xff0c;并于 2025 年 6 月结束。 期间可能对GAMIT联网数据下载造成影响。

谷歌Titans模型论文解析,Transformer迎来变革拐点——DeepSeek能否“接招”?

一、引入 Titans 模型 我们将深入探讨谷歌研究院的一篇新论文《Titans: Learning to Memorize at Test Time》&#xff0c;该论文介绍了一种名为 Titans 的新模型架构。 Titans 在缓解 Transformer 二次方成本问题的同时&#xff0c;展现出了令人期待的成果。Titans 模型的设…

新春贺岁,共赴AGI之旅

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 往期精彩文章推荐 季姮教授独家文字版干货 | 面向知识渊博的大语言模型 关于AI TIME AI TIME源起于2019年&#xff0c;旨在发扬科学思辨精神&#xff0c;邀请各界人士对人工智能理论、算法和场景应用的本质问题…

Baklib推动数字化内容管理解决方案助力企业数字化转型

内容概要 在当今信息爆炸的时代&#xff0c;数字化内容管理成为企业提升效率和竞争力的关键。企业在面对大量数据时&#xff0c;如何高效地存储、分类与检索信息&#xff0c;直接关系到其经营的成败。数字化内容管理不仅限于简单的文档存储&#xff0c;更是整合了文档、图像、…