红绿灯题解

该问题是一个简单的数学和编程题目,要求计算在给定红绿灯周期(a秒绿,b秒红)以及观察时间c秒内,绿灯亮了多少秒。解决方案是将总时间c除以周期a+b,得到完整周期数,然后加上余下时间里绿灯亮的时间,即min(c%(a+b),a)。
摘要由CSDN通过智能技术生成

题目描述
小 Q 喜欢站在马路边发呆。
这天,小 Q 注意起了十字路口的红绿灯,他发现这个红绿灯总是先绿 a a a 秒,再变成红 b b b 秒,然后再变绿 a a a 秒,变红 b b b 秒,不断循环。小 Q 在红绿灯刚刚变绿的时候开始观察,持续了 c c c 秒。
请你求出,这 c c c 秒中,有多少时间红绿灯是绿的。
输入格式
一行三个整数 a , b , c a,b,c a,b,c,含义如上。
输出格式
一行一个整数 x x x,表示红绿灯一共绿了 x x x 秒。
样例
Input 1
2 1 10
Output 1
7
提示
对于 100% 的数据, 1 ≤ a , b , c ≤ 1 0 9 1≤a,b,c≤10^9 1a,b,c109
子任务一(30 分): c ≤ a c≤a ca
子任务二(30 分): a , b , c ≤ 1 0 3 a,b,c≤10^3 a,b,c103
子任务三(40 分):无附加限制

代码思路:
这是一道比较简单的题目,一个绿灯和一个红灯为一个周期,一个周期的时间为 a + b a+b a+b
所以红绿灯一共绿了 c / ( a + b ) ∗ a + m i n ( c % ( a + b ) , a ) c / (a + b) * a + min(c \% (a + b),a) c/(a+b)a+min(c%(a+b),a)
AC code:

#include <iostream>
using namespace std;

int main()
{
	long long a,b,c;
	cin >> a >> b >> c;
	long long t = c / (a + b);
	cout << (t * a) + min(c % (a + b),a) << endl;
	return 0;
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值