专栏文章
题解:UVA10550 Combination Lock
UVA10550题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mingtf6q
- 此快照首次捕获于
- 2025/12/02 02:11 3 个月前
- 此快照最后确认于
- 2025/12/02 02:11 3 个月前
题目翻译(来自AI)
UVA 10550-密码锁(Combination Lock)
题目描述:
你有一个密码锁,初始位置为 。要打开它,需要按照以下步骤操作:
-
顺时针旋转两圈( 度)
-
继续顺时针旋转,直到到达第一个目标数字(记为 )
-
逆时针旋转一圈( 度)
-
继续逆时针旋转,直到到达第二个目标数字(记为 )
-
最后顺时针旋转,直到到达第三个目标数字(记为 )
输入格式:
每行输入四个整数:
起始位置()
第一个目标数字 ()
第二个目标数字 ()
第三个目标数字 ()
输入以四个 结束。
输出格式:
对于每组输入,输出转动密码锁所需的总度数(整数)。
解题思路
首先,无论密码是多少,你必须要转三整圈,所以结果一定是大于 的,也就是 度,密码锁一圈有四十个格子,所以一个格子是九度。
可以先将结果初始化为 度,这样后面就可以不用管先转两圈顺时针后转一圈逆时针了。
然后就到了比较需要你进行巴巴博弈的地方了。
从初始位置 到第一个密码 的位置时,如果 ,那么你只需要转 度;反之,则在转的时候需经过零刻度线,需转 度。
随后,从第一个密码 到第二个密码 时需要注意是逆时针转而不是和第一次一样,如果 ,那么你在转的时候会过零刻度线,所以需要转 度,反之转 度。
第三步是转第三个密码,转第三个密码和转第一个密码是一样的思路和过程,可以参考转第一个密码的代码。
输入结束是以四个零结束,只需要用 while 循环实现输入,读到四个零就结束。
代码如下
CPP#include<bits/stdc++.h>
using namespace std;
int main(){
long long start,first,second,third,sum;
while(cin>>start>>first>>second>>third){
if(start==0&&first==0&&second==0&&third==0){
return 0;//题目是以0 0 0 0结尾
}
sum=1080;
if(start>=first){
sum+=(start-first)*9;
}else{
sum+=(40-(first-start))*9;
}
if(first>=second){
sum+=(40-(first-second))*9;
}else{
sum+=(second-first)*9;
}
if(second>=third){
sum+=(second-third)*9;
}else{
sum+=(40-(third-second))*9;
}
cout<<sum<<endl;
}
return 0;
}
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...