975 字
4 分钟阅读
乘法口诀数列
题目描述
本题要求你从任意给定的两个 1 位数字 a_1 和 a_2 开始,用乘法口诀生成一个数列 { a_n },规则为从 a_1 开始顺次进行,每次将当前数字与后面一个数字相乘,将结果贴在数列末尾。如果结果不是 1 位数,则其每一位都应成为数列的一项。
输入格式
输入在一行中给出 3 个整数,依次为 a_1 、 a_2 和 n ,满足 0 \le a_1,a_2 \le 9 , 0 \le n \le 10 ^ 3 。
输出格式
在一行中输出数列的前 n 项。数字间以 1 个空格分隔,行首尾不得有多余空格。
输入样例
2 3 10
输出样例
2 3 6 1 8 6 8 4 8 4
样例解释
数列前 2 项为 2 和 3。从 2 开始,因为 2 \times 3 = 6 ,所以第 3 项是 6。因为 3 \times 6 = 18 ,所以第 4、5 项分别是 1、8。依次类推…… 最后因为第 6 项有 6 \times 8 = 48 ,对应第 10、11 项应该是 4、8。而因为只要求输出前 10 项,所以在输出 4 后结束。
题意
给出 a_1,a_2 ,从 1 开始,将 a_i,a_{i + 1} 的结果十进制位上的每一个数字追加到序列 a 中,直到序列长度超过 n ,输出序列前 n 项。
思路
通过vector模拟题意即可。
代码
void solve(){
int a1,a2,n;
cin >> a1 >> a2 >> n;
vector<int> a = {a1,a2};
for(int i = 0;a.size() < n;i++){
int now = a[i] * a[i + 1];
if(now >= 10){
a.push_back(now / 10);
a.push_back(now % 10);
}
else{
a.push_back(now);
}
}
for(int i = 0;i < n;i++){
if(i) cout << " ";
cout << a[i];
}
}

[…] 乘法口诀数列 题解 […]