Test Message

c350: “綠白黃” 四校聯課

內容

~大家期待已久,史無前例的四校聯課終於展開~

由沉澱主辦的四校聯課
邀請了 “ 綠綠 ” “ 白白 ” “ 黃黃 ” 三間友校一同參與
而在最後一天,三間友校為了表達謝意
將她們的電話送給沉澱的學長們~~

但事情沒有學長想像中的簡單~~他們只將其中 N 個人的電話給了學長,並開出了以下條件:smilelaughing

1. 每 K 個電話可以要其他 W 個學姊/妹的電話
2. 用過的電話不可再使用
3. 換到的電話視為新的電話(也就是可以再拿去換)

輸入

單筆輸入
輸入只有三個整數 N, K, W (N, K, W <= 10^4, 且 W < K)
代表一開始學長拿到的電話數及學姊給的限制 K 及 W

// Example 1
6 5 1

// Example 2
144 188 87

// Example 3
9 3 2

輸出

輸出只有一行一個整數。
代表學長總共可以拿到的電話總數。
答案範圍保證在 int 範圍。

// Example 1
7

// Example 2
144

// Example 3
23


解題思路

每將 k 個可用的電話號碼拿去交換,可用的電話號碼會減 k 個,能用的加 w 個,根據題意 k > w,所以可以看成每交換一次,能用的電話號碼會減少 (k-w) 個。

利用除法判斷剩下的電話號碼(n)有幾組 k 能交換,然後一次減掉 (k-w) * 組數,如此循環直到 n / k = 0 代表無法再交換了,跳出迴圈輸出答案。


完整程式碼

AC (2ms, 112KB)
#include <stdio.h>

int main()
{
int n, k, w, m, sum, gap;
scanf(" %d %d %d", &n, &k, &w);
sum = n, gap = k - w;
for (int i = n / k; i; i = n / k)
sum += w * i, n -= gap * i;
printf("%d\n", sum);
return 0;
}