題目描述

這個題目將會測試您對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

範例輸出

2 6 14 30 62 126 254 510 1022 2046
8 14 26 50 98

額外解釋

在第一個測試資料中,a為0,b為2,n為10。所以計算過程如下:

n = 0
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();
        }
    }
}