Night at the Museum
阿新 • • 發佈:2018-12-08
這裡有一個密碼鎖,正上方是指標的位置,每次需要旋轉這個鎖,讓某一個字母對準指標才能夠進行下一步,怎麼可以轉動最小步數,讓指標得到想要的字串。比如 a -> c 最少需要擰動鎖 2 次.;一開始指標指著 a,輸出想要得到某一個字串最少需要擰多少下?
Input
給定一個字串,小寫字母
Output
輸出一個整數,代表最少擰動次數.
Sample Input
zeus
Sample Output
18
Hint
比如要得到 zeus, 一開始在 a
- 'a' to 'z' (1 步),
- 'z' to 'e' (5 步),
- 'e' to 'u' (10 步),
- 'u' to 's' (2 步).
總共 1 + 5 + 10 + 2 = 18 步
這道題的思路並不是太難,但是我在做的時候用了很長的時間。
原因就是我沒有弄清楚字元往整形上的轉變。
'a'對應的ASCII碼值為49,'z'對應的ASCII碼值為74
如果說第一個數比較大,那麼第一個數減去第二個數就是正,反之為負數
如果說第一個數比較小,那麼第一個數減去第二個數就是負,反之為正數
下面的是C的AC程式碼
#include<stdio.h> #include<string.h> int main() { char a[1000]; int b[1000]; scanf("%s",a); int l=strlen(a); for(int i=1;i<l+1;++i) { b[i]=a[i-1]-'0'; } b[0]='a'-'0'; l+=1; int num=0; for(int i=1;i<l;++i) { if(b[i-1]<b[i]) { if(b[i-1]-b[i]+26<b[i]-b[i-1]) num+=b[i-1]-b[i]+26; else num+=b[i]-b[i-1]; } else { if(b[i-1]-b[i]<b[i]-b[i-1]+26) num+=b[i-1]-b[i]; else num+=b[i]-b[i-1]+26; } } printf("%d\n",num); return 0; }