小蓝是一家旅行社的售票员,他每天都很忙碌。
为什么呢?原因是这样的,当地文旅局与旅行社合作,所以旅行社能够以更加低廉的价格拿到票,然后旅行社再将这些票配套导游服务一起卖给顾客。虽然看起来十分划算,但是这可苦了我们的售票员小蓝。因为即使能够拿到更低价的票,但是票仍然需要从机器中打印出,文旅局的机器十分的老旧,但是旅行社的订单又十分的多,这就导致了小蓝需要耗费大量的时间来打印票据。
题解:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int t;
scanf("%d",&t);
while(t--)
{
long long x,y,a;
scanf("%lld%lld%lld",&x,&y,&a);
long long sum=0;
long long m=a/3;
long long n=a%3;
if(a%3==0)
{
n=3;
m--;
}
if(a!=0) // 添加条件判断,避免剩余票数为0时多进行一次循环
{
if(y>2*x) sum+=(x*3+(y-2*x))*m;
else sum+=x*3*m;
sum+=n*x;
}
printf("%lld\n",sum);
}
return 0;
}
代码解读:
- 程序首先读取测试数据的数量
t
。 - 然后进入一个循环,循环
t
次,每次处理一个测试数据。 - 在每次循环中,程序会读取三个整数
x
、y
、a
,分别表示打印一张票的时间、冷却时间和总票数。 - 接下来,程序会计算两个变量
m
和n
,分别表示打印机器的完整周期数和剩余票数。 - 如果剩余票数
a
能被 3 整除,则将n
设置为 3,并将m
减 1。这样做是为了确保每个周期都是完整的。 - 接着程序根据给定的条件计算总时间
sum
:- 如果冷却时间大于两倍的打印时间,那么每个周期中的冷却时间将超过打印时间,因此在每个完整的周期中,我们可以用
(x * 3 + (y - 2 * x)) * m
来计算打印时间。 - 否则,我们只需将每个完整的周期中的打印时间累加到总时间中即可,即
x * 3 * m
。 - 最后,我们再加上剩余票数的打印时间
n * x
。
- 如果冷却时间大于两倍的打印时间,那么每个周期中的冷却时间将超过打印时间,因此在每个完整的周期中,我们可以用
- 最后,程序输出总时间
sum
。 - 循环结束后,程序结束执行。