A-咕咕東的奇遇
題目描述
咕咕東是個貪玩的孩子,有一天,他從上古遺迹中得到了一個神奇的圓環。這個圓環由字母表組成首尾相接的環,環上有一個指針,最初指向字母a。咕咕東每次可以順時針或者逆時針旋轉一格。例如,a順時針旋轉到z,逆時針旋轉到b。咕咕東手裡有一個字元串,但是他太笨了,是以他來請求你的幫助,問最少需要轉多少次。
Input
輸入隻有一行,是一個字元串。
Output
輸出最少要轉的次數。
Sample Input
zeus
Sample Output
Note
資料點 | 字元串長度 |
---|---|
1,2 | 小于等于10 |
3,4,5 | 小于等于100 |
6,7,8,9,10 | 小于等于10000 |
題解
- 總體思路:循環輸入單個字元,計算它與上一個字元的距離,把這些距離相加即得答案
- test存放每次輸入的字元,last存放的是上一個字元(初始值設為a),ans存放最終答案
- 在循環時,dis(distance)表示的是從last轉到test沿字母順序轉(沒有從a到z或從z到a的跳變)所需要轉的格數,若該數大于13,則證明從轉盤的另一邊轉的話距離更短,ans=ans+(26-dis);若該數小于13,則ans=ans+dis。
- 所有的數都輸入完後,計算也完成,輸出ans即可
- 另一種方法是開一個字元型數組存放所有字母,應注意數組太大可能會爆棧,是以大數組要在靜态區聲明,并開大億點點。
代碼
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <math.h>
using namespace std;
int main(int argc, char** argv) {
char test;
int ans=0;
char last='a';
while(cin>>test){
int dis=abs(test-last);
if(dis<=13){
ans=ans+dis;
}else{
ans=ans+(26-dis);
}
last=test;
}
cout<<ans<<endl;
return 0;
}