トピックの説明
この質問では、任意の 2 つの 1 桁の数字 a 1 および a 2 から開始し、乗算式を使用して数列 {a n } を生成する必要があります。ルールは a 1 から開始することです。これは数回実行され、そのたびに現在の数値が次の数値で乗算され、結果がシーケンスの最後に貼り付けられます。結果が 1 桁の数値でない場合、その各桁はシーケンス内の項目になります。
入力形式:
1 行に 3 つの整数を入力し、続いて a 1 、a 2 、n を入力し、0≤a 1 、a 2 ≤9、0<n≤ 10 3 を満たします。
出力形式:
シーケンスの最初の n 個の項目を 1 行に出力します。数字は 1 つのスペースで区切られ、行頭と行末に余分なスペースがあってはなりません。
入力サンプル:
2 3 10
出力例:
2 3 6 1 8 6 8 4 8 4
分析する
例からわかるように 2 * 3 = 6 なので、最初の 3 項目は 2, 3, 6 で
、後の 3 * 6 = 18; 18 は 2 桁の数字なので、1, 8 です。分別して保管しています
各積の結果を ArrayList に入れ、最終的にリストの size() が入力容量よりも小さいかどうかを判断し、2 つの乗算された数を 1 ビット後方に移動します。
コードは比較的理解しやすいので、コードに直接行きましょう
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));
}
}