XDOJ_698_乘法口诀数列

问题描述

从任意给定的两个一位数字 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;
}

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

塔码码的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值