c006 - 10550 - Combination Lock
題目描述
題目要求計算打開一個組合鎖所需的總轉動角度。組合鎖有 40 個刻度 (0-39),密碼由三個數字組成。開鎖步驟包括:順時針轉兩圈,轉到第一個數字,逆時針轉一圈,轉到第二個數字,順時針轉到第三個數字。給定初始位置和密碼,計算總轉動角度。
解題思路
題目描述的開鎖步驟可以分解為幾個部分:
- 初始位置到第一個數字:計算順時針或逆時針轉動的角度,取最小的角度。
- 第一個數字到第二個數字:逆時針轉動一圈 (360 度),然後計算順時針或逆時針轉動的角度,取最小的角度。
- 第二個數字到第三個數字:順時針轉動。計算順時針或逆時針轉動的角度,取最小的角度。
程式碼直接模擬了這些步驟,並計算了總轉動角度。由於每次轉動都是在 0-39 的刻度上進行,因此可以簡單地計算兩個刻度之間的差值,並根據順時針或逆時針方向選擇相應的角度。
複雜度分析
- 時間複雜度: O(1)
- 空間複雜度: O(1)
程式碼
#include <iostream>
using namespace std;
int main(){
int a,b;
while(cin >> a){
int sum=1080;
cin >> b;
if(a==0&&b==0)
break;
(b>a)?sum+=(40-b+a)*9:sum+=(a-b)*9;
a=b;
cin >> b;
(a>b)?sum+=(40-a+b)*9:sum+=(b-a)*9;
a=b;
cin >> b;
(b>a)?sum+=(40-b+a)*9:sum+=(a-b)*9;
cout << sum << "\n";
}
}