nyoj1311勤奋的涟漪

勤奋的涟漪

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 1
描述
涟漪每天都会到工一的实验室(7楼)学习,一天去三次。工一有两部电梯,其中有一部电梯每隔x天维修一次,(维修期间,电梯一整天都不工作),另一部电梯每隔y天维修一次,如果同一天两部楼梯都在维修期间,涟漪只能爬楼梯,他想知道从第1天到第n天一共走了多少层楼梯?(设第0天两部电梯都在维修)
输入
第一行包含t组测试数据(t<=150) 每组测试输入3个数字x,y,n(0<=x<=1000 , 0<=y<=1000 , n<=1e9)
输出
输出走了多少层楼梯。
样例输入
2
1  1  2
2  3  6
样例输出
36
0
题目不难,却比较坑(额,或者说比较灵活吧)。
思路:只需求x,y的最小公倍数m,再用天数n除m,就得到了n天里要爬楼梯的天数,
再乘每天爬的楼层数即大功告成。(然而一不注意就是WrongAnser~~~)
值得注意的是:
1)“ x天维修一次”,意味着要在x,y的基础上都加1;
2)一共了多少层楼梯;走,可以是上楼梯也可以是下楼梯嘛!
3)注意数据范围,n<=1e9,1e9=10^9,总之int存是不行的,不信?
来给组数据试试便知
测试数据
1
0 0 1000000000
答案
36000000000 > INT_MAX(int的最大值2147483648)
AC代码
#include <stdio.h>
long gcd(long long a, long long b) {
	if(a == 0) return b;
	return gcd(b%a, a);
}
int main() {
	long long x, y, n, t;
	scanf("%lld", &t);
	while(t--) {
		scanf("%lld%lld%lld", &x, &y, &n);
		x++;
		y++;
		printf("%lld\n",(n/(x*y/gcd(x,y))*36));
	}
	return 0;
}


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值