第一题,放球
题目描述
在一个无穷大的桌面上,一开始没有小球,现在小明从左往右放小球,重复如下步骤无穷次:
-
在当前所有小球的最右边放 R 个红球。
-
在当前所有小球的最右边放 B 个黑球。
你的任务是计算从左往右看,前面的 N 个小球当中,有多少个红色小球。
输入格式
3 个整数:N , R , B ( 1 <= N<= 10^{18}1018 , R >= 0 , B >=0 , R+B <= 10^{18}1018 )
输出格式
一个整数。
样例
输入数据 1
8 3 4
Copy
输出数据 1
4
Copy
输入数据 2
8 0 4
Copy
输出数据 2
0
代码+题解
#include <bits/stdc++.h>
using namespace std;
//unsigned long long ;
long long n,b,c,s;
int main(){cin>>n>>b>>c;long long s1=n/(b+c);//求在n之前有多少个轮回long long s2=n%(b+c);//求现在这个轮回有多少个数if(s2>=b) s2=b;//判断如果现在是黑色球,加上红色球cout<<s1*b+s2;//输出红球return 0;
}