C语言(45)勤奋的涟漪

描述

 

涟漪每天都会到工一的实验室(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

 

#include <stdio.h>

int main(int argc, char **argv)
{
	int x,y,t,max,min,tmp,sum;
	long long n;
	scanf("%d", &t);
	while(t--){
		scanf("%d%d%lld", &x, &y, &n);
		if(0 == x && 0 == y){
			printf("%lld\n", 36*n);

		}else if(0 == x || 0 == y){
			max = x>y?x:y;
			printf("%lld\n", (n/(max+1))*36);
			
		}else{
			min = x>y?y:x;
			max = x>y?x:y;
			min++;
			max++;
			tmp = 2;
			sum = 1;
			//最大公约数
			while(tmp <= min){
				
				//printf("%d %d %d\n", min%tmp, max%tmp,sum);
				if((0 == min%tmp) && (0 == max%tmp)){
					min /= tmp;
					max /= tmp;
					sum *= tmp;
					continue;
				}
				tmp++;
			}
			//printf("%d %d %d\n", x, y,sum);
			printf("%lld\n", (n/(((x+1)*(y+1))/sum)*36));
		}
	}
	return 0;
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值