PAT-L1-80 乘法口诀数列JAVA实现

题目描述

本题要求你从任意给定的两个 1 位数字 a​1​​ 和 a​2​​ 开始,用乘法口诀生成一个数列 {a​n​​},规则为从 a​1​​ 开始顺次进行,每次将当前数字与后面一个数字相乘,将结果贴在数列末尾。如果结果不是 1 位数,则其每一位都应成为数列的一项。


输入格式:
输入在一行中给出 3 个整数,依次为 a​1​​、a​2​​ 和 n,满足 0≤a​1​​,a​2​​≤9,0<n≤10​3​​。

输出格式:
在一行中输出数列的前 n 项。数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

2 3 10

输出样例:

2 3 6 1 8 6 8 4 8 4

解析

可以由样例看出 2 * 3 = 6,所以前三项就是2,3, 6
而后面的 3 * 6 = 18;由于18是两位数,所以拆开存入就是1,8

我们可以把每次乘积结果放入ArrayList中,最后判断list的size()是否比输入的容量小就行了,然后相乘的两个数都各自往后移一位即可

代码比较易懂,我直接上代码吧

import java.util.Scanner;
import java.util.ArrayList;

public class Main{
    
    
    public static void main(String[] args){
    
    
        Scanner sc = new Scanner(System.in);
        int num1 = sc.nextInt();
        int num2 = sc.nextInt();
        int n = sc.nextInt();
        ArrayList<Integer> list = new ArrayList<>();
        list.add(num1);
        list.add(num2);
        int i = 0, j = 1;
        
        while(list.size() < n){
    
    
            int sum = list.get(i) * list.get(j);
            if(sum < 10){
    
    
                list.add(sum);
                i++;
                j++;
            }else{
    
    
            	//获取十位上的数
                int sum1 = sum / 10;
                //获取个位上的数
                int sum2 = sum % 10;
                //这里当时我还以为会有3位或以上的数,但想了一下,最多9*9也就81,哪来的3位数,所以上面就获取十位上的就行
                
                list.add(sum1);
                
                //判断此时list是否还是小于输入的大小,如果相等了就不加了
                if(list.size() < n){
    
    
                    list.add(sum2);
                }
                
                i++;
                j++;
            }
            
        }
        //这里是为了输出两数之间的空格
        for(int k = 0; k < n - 1; k++){
    
    
            System.out.print(list.get(k) + " ");
        }
        System.out.print(list.get(n - 1));
    }
}

猜你喜欢

转载自blog.csdn.net/giveupgivedown/article/details/129867766