问题描述
阿凯有很多红球和蓝球。现在,他将把它们排成一行。
初始时,没有放置球。阿凯非常有耐心,他将进行以下操作次:
- 在已经放置的球的末尾放置A个蓝球。然后,在行的末尾放置B个红球。
按照这种方式制作的前N个球中有多少个蓝球?
约束条件
- 1≤N≤
- A,B≥0
- 0<A+B≤
- 输入中的所有值都是整数。
输入
输入以下格式从标准输入给出:
N A B
输出
打印在球行的前N个球中有多少个蓝球。
示例
示例-1
输入
8 3 4
输出
4
令b
表示一个蓝球,r
表示一个红球。球行中的前八个球将是bbbrrrrb
,其中有四个蓝球。
示例-2
输入
8 0 4
输出
0
他从一开始就只放置了红球。
C程序源代码
#include <stdio.h>
long long countBlueBalls(long long N, long long A, long long B) {
if (N == 0) {
return 0;
}
long long cycleLength = A + B;
long long fullCycleBlue = A;
long long fullCycleCount = N / cycleLength;
long long partialCycleLength = N % cycleLength;
long long partialCycleBlue = (A < partialCycleLength) ? A : partialCycleLength;
long long totalBlue = fullCycleCount * fullCycleBlue + partialCycleBlue;
return totalBlue;
}
int main() {
long long N, A, B;
scanf("%lld %lld %lld", &N, &A, &B);
long long result = countBlueBalls(N, A, B);
printf("%lld\n", result);
return 0;
}