題目描述
這個題目將會測試您對Java迴圈的認知。給定a、b和n,三個變數的值,計算出以下算式的結果。
a+20b,a+20b+21b,......,a+20b+21b+...+2n-1b
原題網址
輸入格式
第一行輸入測試資料的數量t。接下來的t行都有三個整數,分別代表a、b和n的值。
t的範圍在0到500(包含0和500)之間。a大於等於0,b小於等於15,n在0到15(包含0和15)之間。
輸出格式
在每一行印出對應的測試資料之計算結果。
範例輸入
2
0 2 10
5 3 5
0 2 10
5 3 5
範例輸出
2 6 14 30 62 126 254 510 1022 2046
8 14 26 50 98
8 14 26 50 98
額外解釋
在第一個測試資料中,a為0,b為2,n為10。所以計算過程如下:
n = 0
a + 20 * 2 = 0 + 1 * 2 = 0 + 2 = 2
a + 20 * 2 = 0 + 1 * 2 = 0 + 2 = 2
n = 1
a + 20 * 2 + 21 * 2 = 2 + 2 * 2 = 2 + 4 = 6
n = 2
a + 20 * 2 + 21 * 2 + 22 * 2 = 6 + 4 * 2 = 6 + 8 = 14
就這樣依此類推。
解題概念
此題的方程式明確,只要利用迴圈將數值代入即可。要控制計次的迴圈,使用for迴圈會比較容易。在每個測試資料中,最終要計算的算式是a+20b+21b+...+2n-1b,先前計算的算式都是最後算式的計算過程中會先計算的部份,因此不需要再花費時間重複計算之前的算式,可以直接計算最後的算式,並在加總過程中,一邊把結果輸出。
參考答案
import java.util.Scanner;
public class Solution {
public static void main(final String[] args) {
final Scanner sc = new Scanner(System.in);
final int k = Integer.parseInt(sc.nextLine());
for (int i = 0; i < k; ++i) {
final int a = sc.nextInt();
final int b = sc.nextInt();
final int n = sc.nextInt();
for (int j = 0; j < n; ++j) {
int sum = a;
for (int m = 0; m <= j; ++m) {
sum += (int) (Math.pow(2, m) * b);
}
System.out.print(sum);
if (j != n - 1) {
System.out.print(" ");
}
}
System.out.println();
}
}
}