天天看點

WEEK4 csp模拟 A-咕咕東的奇遇A-咕咕東的奇遇

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;
}