1 条题解
-
0
题意分析
- 刻度盘特性:个刻度,每个刻度间隔度(度)
- 旋转规则:
- 顺时针整圈(度)
- 逆时针整圈(度)
- 分段旋转计算实际移动的刻度数
- 关键点:计算相邻数字间的刻度差时,需要考虑顺时针和逆时针的方向差异
解题思路
- 初始化:读取初始位置和三个密码数字
- 分步计算: a. 顺时针圈:固定加度 b. 从到:计算顺时针旋转的刻度差,乘以度 c. 逆时针圈:固定加度 d. 从到:计算逆时针旋转的刻度差,乘以度 e. 从到:计算顺时针旋转的刻度差,乘以度
- 累加求和:将各步度数相加得到总旋转度数
实现步骤
- 处理输入直到遇到
- 对每个测试用例:
- 计算第一步固定度
- 计算三个密码数字间的分段旋转度数
- 注意模运算处理刻度盘循环特性
- 输出总度数
代码实现
/* POJ2304 ZOJ1928 UVA10550 Combination Lock */ #include <iostream> #include <cstdio> using namespace std; const int MN = 40; int main() { int p, a, b, c; while(~scanf("%d%d%d%d", &p, &a, &b, &c) && (p || a || b || c)) { int ans = MN * 3; // 第1步+第3步共转3圈,每圈40格 ans += (p - a + MN) % MN; ans += (b - a + MN) % MN; ans += (b - c + MN) % MN; printf("%d\n", ans * 360 / MN); // 格转度数(360度=40格) } return 0; }
- 1
信息
- ID
- 1305
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者