CodeForces - 731A

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


欢迎各位网友指点~~~

猜你喜欢

转载自blog.csdn.net/weixin_53523248/article/details/115420899