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];
    }
}

1 条评论

  1. 2026年贵工程寒假训练题解 – 追求的个人博客 2026年1月17日

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

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注