题目很好理解,难度也不高,所以我们很容易写代码:
- 输入 $a_1, a_2, k$
- 建立两个指针,都指向 $2$,一个代表序列数字的数量,一个代表现在要乘的是 $x$ 和 $x - 1$。
- 开始循环推数列,∵序列长度为 $size$ ∴结束不结束的条件是
tot < k
。 - 对于每个 $a_{it},a_{it-1}$ 的乘积,我们可以进行分类讨论:
若 $a_{it} \times a_{it-1} \le 9$
则 $a_{++size} = a_{it} \times a_{it-1}$
否则 $a_{size+2} = {(a_{it} \times a_{it-1}) \div 10, (a_{it} \times a_{it-1}) \mod 10}$
因为不确定 $size = k$,所以输出不是 ${a_1, a_2, a_3, … a_{size}}$ 而是 ${{a_1, a_2, a_3, … a_{k}}}$。
C++ code:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 5;
int a[N], k;
main() {
scanf ("%d%d%d", &a[1], &a[2], &k);
int tot = 2, it = 2;
while (tot < k) {
int x = a[it] * a[it - 1];//取出目前 it 和 it - 1 的值并相乘
if (x >= 10) {//分类讨论
a[++ tot] = x / 10;
a[++ tot] = x % 10;
}
else a[++ tot] = x;
++ it;
}
for (int i = 1; i <= k; i ++)
printf ("%d ", a[i]);
return 0;
}
update 2022/03/17:
刚好这个人在练习 python,所以就再贴一份 python 的代码叭(萌新勿喷):
a1, a2, n = input().split()
a1, a2, n = int(a1), int(a2), int(n)
a = [a1, a2]
it1, it2 = 0, 1
while len(a) < n:
t1, t2 = a[it1] * a[it2] // 10, a[it1] * a[it2] % 10
if t1: a.extend([t1, t2])
else: a.extend([t2])
it1, it2 = it2, it2 + 1
if len(a) > n: del a[len(a) - 1]
for i in range(n):
print(a[i], end = ' ')
顺便更新了一下,简单点的 c++ 代码:
#include<iostream>
using namespace std;
int a[10005],n;
int main()
{
cin>>a[1]>>a[2]>>n;
int it1=1,it2=2,tot=2;
while (tot<n)
{
int t1=a[it1]*a[it2]/10;
int t2=a[it1]*a[it2]%10;
if(t1) a[++tot]=t1,a[++tot]=t2;
else a[++tot]=t2;
++it1; ++it2;
}
if(tot>n) tot--;
for(int i=1;i<=n;i++) printf("%d ",a[i]);
}
大佬加油!
大佬太强了
别骂了,本fw简单题重拳出击