大佬每天都会到软工的实验室(7楼)学习,一天去三次。软工有两部电梯,其中有一部电梯每隔x天维修一次,(维修期间,电梯一整天都不工作),另一部电梯每隔y天维修一次,如果同一天两部楼梯都在维修期间,大佬只能爬楼梯,他想知道从第1天到第n天一共走了多少层楼梯?(设第0天两部电梯都在维修) 输入 第一行包含t组测试数据(t<=150) 每组测试输入3个数字x,y,n(0<=x<=1000 , 0<=y<=1000 , n<=1e9) 输出 输出走了多少层楼梯。
时间: 2024-02-03 14:12:24 浏览: 19
对于每组数据,可以先计算出两部电梯分别维修了多少次,然后再计算大佬在每个周期内走的楼梯数:
```python
t = int(input())
for _ in range(t):
x, y, n = map(int, input().split())
# 分别计算两部电梯的维修次数
x_count = (n - 1) // x
y_count = (n - 1) // y
# 计算大佬在每个周期内走的楼梯数
x_stairs = x * (x_count + 1)
y_stairs = y * (y_count + 1)
# 如果同一天两部电梯都在维修期间,需要减去一次楼梯数量
if (n - 1) // x == (n - 1) // y:
stairs = n - x_stairs - 1
else:
stairs = x_stairs + y_stairs - n
print(stairs)
```
对于每组数据,时间复杂度为 O(1),可以通过本题。
相关问题
大佬每天都会到软工的实验室(7楼)学习,一天去三次。软工有两部电梯,其中有一部电梯每隔x天维修一次,(维修期间,电梯一整天都不工作),另一部电梯每隔y天维修一次,如果同一天两部楼梯都在维修期间,大佬只能爬楼梯,他想知道从第1天到第n天一共走了多少层楼梯?(设第0天两部电梯都在维修)
我们可以先计算出每部电梯的维修日期,然后模拟大佬每天要爬楼梯的情况。
首先,我们需要确定每部电梯的维修日期。设两部电梯的维修间隔分别为x和y,则第i天,第一部电梯是否需要维修的判断条件为(i%x==0),第二部电梯是否需要维修的判断条件为(i%y==0)。
接下来,我们需要模拟大佬每天要爬楼梯的情况。设第i天大佬走了c[i]层楼梯,则c[i]的计算方式如下:
1. 如果两部电梯都在维修期间,则c[i]=c[i-1]+2(因为只能爬楼梯)。
2. 如果只有一部电梯在维修期间,则c[i]=c[i-1]+1(因为有一部电梯可以使用)。
3. 如果两部电梯都不在维修期间,则c[i]=c[i-1]+2(因为两部电梯都可以使用)。
最后,我们将每天走的楼梯数相加,即可得出大佬从第1天到第n天一共走了多少层楼梯。
下面是Python代码实现:
用C语言D. 勤奋的大佬(循环) 题目描述 大佬每天都会到软工的实验室(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
以下是该题的C语言代码实现:
```c
#include <stdio.h>
int main() {
int t, x, y, n;
scanf("%d", &t); // 输入测试数据组数
while (t--) {
scanf("%d %d %d", &x, &y, &n); // 输入x、y、n
int sum = 0, i;
for (i = 1; i <= n; i++) {
if ((i % x == 0) && (i % y == 0)) {
// 如果两部电梯都在维修期间,大佬只能爬楼梯
sum++;
} else if (i % x == 0) {
// 如果第一部电梯在维修期间,大佬只能坐第二部电梯
continue;
} else if (i % y == 0) {
// 如果第二部电梯在维修期间,大佬只能坐第一部电梯
continue;
} else {
// 两部电梯都可以用
sum += 2;
}
}
printf("%d\n", sum * 7); // 一天三次,所以要乘以7
}
return 0;
}
```
该程序的基本思路是:
对于每一天,判断两部电梯是否坏了,如果坏了,则只能爬楼梯;如果没有坏,则可以用两部电梯,每天可以坐两次。最后将走的总层数乘以7输出即可。