问题描述
从任意给定的两个一位数字 a1 和 a2 开始,用乘法口诀生成一个n项数列 {a1,a2,…,an}, 规则为从 a1 开始顺次进行,每次用当前数字与后面一个数字相乘,将结果贴在数列末尾。 如果结果不是一位数,则其每一位都应成为数列的一项。
输入说明
在一行中读入 3 个整数,依次为 a1、a2 和 n,满足 0≤a1,a2≤9,1≤n≤100。
输出说明
输出数列的前 n 项,各数字间以1个空格分隔。
输入样例
2 3 10
输出样例
2 3 6 1 8 6 8 4 8 4
样例说明:
原始数列:2 3 2*3=6
更新数列:2 3 6 3*6=18,18拆分为两项
更新数列:2 3 6 1 8 6*1=6
更新数列:2 3 6 1 8 6 1*8=8
更新数列:2 3 6 1 8 6 8 8*6=48,48拆分为两项
更新数列:2 3 6 1 8 6 8 4 8 6*8=48,48拆分为两项
更新数列:2 3 6 1 8 6 8 4 8 4 8
输出数列前10项:2 3 6 1 8 6 8 4 8 4
#include <stdio.h>
int main(){
int a1, a2, n;
scanf("%d %d %d", &a1, &a2, &n);
int sequence[3000] = {0};//创建足够大的序列
sequence[0] = a1;
sequence[1] = a2;
if ((a1 >= 01 && a1 <= 9) && (a2 >= 0 && a2 <= 9) && (n > 0 && n <= 1000)) {//基本条件
if (n == 1) {
printf("%d", a1);
} else if (n == 2) {
printf("%d %d", a1, a2);
} else {
int index = 2;//记录sequence序列的下标
for (int i = 2; i < n; i++) {
int next = sequence[i - 1] * sequence[i - 2];//暂时存储下一个数字
if (next >= 10) {//若为两位数,进行拆分
sequence[index + 1] = next % 10;
sequence[index] = next / 10;
index += 2;//下标加2
} else {//若为一位数,下标加1
sequence[index++] = next;
}
}
for (int i = 0; i < n; i++) {//输出序列
printf("%d ", sequence[i]);
}
}
}
return 0;
}