L1-080 乘法口诀数列*(使用C++)

L1-080 乘法口诀数列

分数 20
作者 陈越
单位 浙江大学

 

本题要求你从任意给定的两个 1 位数字 a1 和 a2 开始,用乘法口诀生成一个数列 {an},规则为从 a1 开始顺次进行,每次将当前数字与后面一个数字相乘,将结果贴在数列末尾。如果结果不是 1 位数,则其每一位都应成为数列的一项。

输入格式:

输入在一行中给出 3 个整数,依次为 a1a2 和 n,满足 0a1,a29,0<n103。

输出格式:

在一行中输出数列的前 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 后结束。

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

 
解题思路:
理解题目花了不少时间不过总体上还算简单,大概意思就是说要自己建立一个数列,给出数列的开头俩个a1 a2,这个数列的规则是这样的a3=a1*a2,a4=a3*a2...如果a1*a2得出来的a3是俩位数那么还要把这俩位数分开独立放进数组(a3=(a1*a2)/10,a4=(a1*a2)%10)
所以关键点在于需要俩个变量维护数列数组arr[],一个下标i来进行常规计算,另一个下标bits来给乘出来的数放到数组arr[]的末尾(因为一次尾插可能是1个数也可能是2个数)
最后别忘了输出的最后一个数是没有空格的()
 
 
代码部分:
 1 #include<iostream>
 2 #include<cmath>
 3 using namespace std;
 4 int a1,a2,n,arr[1003];
 5 int bits=2;
 6 int main()
 7 {
 8     cin>>a1>>a2>>n;
 9     arr[1]=a1,arr[2]=a2;
10     for(int i=2;bits<=n;i++,bits++)
11     {
12         int sum=arr[i]*arr[i-1];
13         if(sum>=10)
14         {
15             int num1=sum/10,num2=sum%10;
16             arr[bits+1]=num1;
17             bits++;
18             arr[bits+1]=num2;
19         }
20         else if(sum<=-10)
21         {
22             int num1=sum/10,num2=abs(sum%10);
23             arr[bits+1]=num1;
24             bits++;
25             arr[bits+1]=num2;
26         }
27         else
28         {
29             arr[bits+1]=sum;
30         }
31     }
32     for(int i=1;i<=n;i++)
33     {
34         if(i==n)
35         {
36             bits=i;
37             break;
38         }
39         cout<<arr[i]<<" ";
40     }
41     cout<<arr[bits];
42     return 0;
43 }

 

原文链接:https://www.cnblogs.com/shenyuRin/p/17270713.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:L1-080 乘法口诀数列*(使用C++) - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • 【Visual Leak Detector】核心源码剖析(VLD 2.5.1)

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇对 VLD 2.5.1 源码做内存泄漏检测的思路进行剖析。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 源码获取 2. 源码文件概览 3. 源码剖析 3.1 通过 inline hook 修补 LdrpCallInitRoutine 3.2 通过 IAT hook 替换内存操…

    C++ 2023年5月11日
    00
  • 信奥赛题1105:数组逆序重存放

    新奥赛一本通,题11051105:数组逆序重存放 时间限制: 1000 ms         内存限制: 65536 KB提交数: 70600                通过数: 47540【题目描述】将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1。要求改为1,4,5,6,8。【输入】两行:第一行数组中元素的个数n(1<n&l…

    C++ 2023年5月5日
    00
  • 05、【算例】openFoam盖驱动空腔流动

    管网:https://doc.cfd.direct/openfoam/user-guide-v9/cavity 一、算例实现 文件结构 0:存放初场 constant:存放网格信息 system:存放网格划分、计算等工具 1、画网格 blockMesh 2、求解 icoFoam 3、保存文件 touch cavity.OpenFOAM 4、后处理 parav…

    C++ 2023年4月18日
    00
  • 前缀和

    前缀和 一、介绍 前缀,顾名思义就是一个东西前面的点缀…(bushi 其实打比方来说就是:假如有一字符串ABCD,那么他的前缀就是A、AB、ABC、ABCD这四个从新从第一个字母一次往后开始拼接的字符串。当然这是字符串。但前缀和一般应用于数组,对于给定的数组a=[1,2,3,4],他的前 i 项和sum[i]就表示数组中a[0]~a[i]的和,具体为:s…

    C++ 2023年5月3日
    00
  • 【Visual Leak Detector】源码调试 VLD 库

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 VLD 源码的调试。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. VLD 库源码调试步骤 1.1 设置为启动项目 1.2 设置调试程序 1.3 设置输出目录 1.4 拷贝 vld 依赖文件 1.5 加断点调试 2. 注意事项 1. VLD 库源码调试步骤 以 vld2.…

    C++ 2023年5月7日
    00
  • C++深拷贝与浅拷贝

    浅拷贝的问题 默认提供的拷贝构造就是浅拷贝,如果拷贝的对象中含有成员指针变量指向堆区中的内存空间,那么就会出现两个对象中的成员指针变量指向同一块堆区空间,当方法执行结束后,对象就会被释放,调用析构函数(析构函数中存在释放在堆区开辟的内存空间),就会存在一块内存空间被多次释放的问题。 解决办法 自己写拷贝构造,让拷贝构造后的对象中的成员指针变量指向一块新的内存…

    C++ 2023年4月25日
    00
  • 第三部分:Spdlog 日志库的实现原理

    Spdlog 是一个快速、异步的 C++ 日志库,被广泛应用于 C++ 项目中。在这篇文章中,我们将探讨 Spdlog 日志库的实现原理。 Spdlog 的结构 Spdlog 由五个主要组件构成:Loggers、Sinks、Formatters、Async Logger 和 Registry。每个组件都扮演着不同的角色,共同协作记录并输出日志消息。 Logg…

    C++ 2023年4月18日
    00
  • 网络流的C++代码实现与过程讲解

    网络流是一种非常重要的图论算法,它在许多实际问题中得到广泛应用。本文将介绍网络流算法的C++代码实现与过程讲解。 算法概述 网络流算法是通过将图中的边看作流量通道,将图的点看作流量的起点或终点,来求解图中的最大或最小流量的问题。它是一种非常重要的最优化算法,广泛应用于图论、运筹学、计算机网络等领域。 网络流算法有很多种,其中最著名的是Ford-Fulkers…

    C++ 2023年4月22日
    00
合作推广
合作推广
分享本页
返回顶部