CodeForces - 731A
原題鏈接
Problem Description:
Grigoriy, like the hero of one famous comedy film, found a job as a night security guard at the museum. At first night he received embosser and was to take stock of the whole exposition.
Embosser is a special devise that allows to “print” the text of a plastic tape. Text is printed sequentially, character by character. The device consists of a wheel with a lowercase English letters written in a circle, static pointer to the current letter and a button that print the chosen letter. At one move it’s allowed to rotate the alphabetic wheel one step clockwise or counterclockwise. Initially, static pointer points to letter ‘a’. Other letters are located as shown on the picture:

After Grigoriy add new item to the base he has to print its name on the plastic tape and attach it to the corresponding exhibit. It’s not required to return the wheel to its initial position with pointer on the letter ‘a’.
Our hero is afraid that some exhibits may become alive and start to attack him, so he wants to print the names as fast as possible. Help him, for the given string find the minimum number of rotations of the wheel required to print it.
Input:
The only line of input contains the name of some exhibit — the non-empty string consisting of no more than 100 characters. It’s guaranteed that the string consists of only lowercase English letters.
Output:
Print one integer — the minimum number of rotations of the wheel, required to print the name given in the input.
Input
The only line of input contains the name of some exhibit — the non-empty string consisting of no more than 100 characters. It’s guaranteed that the string consists of only lowercase English letters.
Examples:
Input:
zeus
Output:
18
Input:
map
Output:
35
Input:
ares
Output:
34
Note:

To print the string from the first sample it would be optimal to perform the following sequence of rotations:
from ‘a’ to ‘z’ (1 rotation counterclockwise),
from ‘z’ to ‘e’ (5 clockwise rotations),
from ‘e’ to ‘u’ (10 rotations counterclockwise),
from ‘u’ to ‘s’ (2 counterclockwise rotations).
In total, 1?+?5?+?10?+?2?=?18 rotations are required.
題目大意:
輸入一個字串 然后找字母 最少需要轉幾次; 順時針逆時針都可以;
思路
起始位置在‘a’, 然后輸入的第一字母減去上一個字母的得數 和26減去這個得數 哪個小選哪個!!!
老規矩 代碼附上:
#include <iostream>
#include<cstring>
using namespace std;
char str[100+10];
int main()
{
int a,b;
while(cin>>str)
{
char ch='a';
a=strlen(str);
int d=0,sum=0;
for(b=0; b<a; b++)
{
d=str[b]-ch;//轉換為整型
d=abs(d);//小心負數
sum+=d<(26-d)?d:(26-d);//作比較 選擇距離近的 然后累加
ch=str[b];//同時更新 ch!!很重要~~~
}
cout<<sum<<endl;
}
return 0;
}
歡迎各位網友指點~~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/272323.html
標籤:其他
上一篇:《Unity Shader入門精要》學習筆記第10章 高級紋理
下一篇:【NOI2001】炮兵陣地 題解
