题解:UVA10550 Combination Lock
本蒻蒟第一篇题解,请大佬见谅,如有问题,还请斧正
我刚看到题目就想到这是一个非常简单的大模拟,就写了一个诗山大模拟(也就是下面的代码),结果一提交发现需要绑定UVA账号,我本人当时直接蒙了
题目翻译(来自AI)
UVA 10550-密码锁(Combination Lock)
题目描述:
你有一个密码锁,初始位置为
-
顺时针旋转两圈(
720 度) -
继续顺时针旋转,直到到达第一个目标数字(记为
first ) -
逆时针旋转一圈(
360 度) -
继续逆时针旋转,直到到达第二个目标数字(记为
second ) -
最后顺时针旋转,直到到达第三个目标数字(记为
third )
输入格式:
每行输入四个整数:
起始位置(
第一个目标数字
第二个目标数字
第三个目标数字
输入以四个
对于每组输入,输出转动密码锁所需的总度数(整数)。
解题思路
首先,无论密码是多少,你必须要转三整圈,所以结果一定是大于
可以先将结果初始化为
然后就到了比较需要你进行巴巴博弈的地方了。
从初始位置
随后,从第一个密码
第三步是转第三个密码,转第三个密码和转第一个密码是一样的思路和过程,可以参考转第一个密码的代码。
输入结束是以四个零结束,只需要用 while 循环实现输入,读到四个零就结束。
最后的最后就是提交代码,但你可能会发现“什么?!需要绑定 UVA!”
代码如下
#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;
}