Competition1:咕咕东的奇遇

题目内容
咕咕东是个贪玩的孩子,有一天,他从上古遗迹中得到了一个神奇的圆环。这个圆环由字母表组成首尾相接的环,环上有一个指针,最初指向字母a。咕咕东每次可以顺时针或者逆时针旋转一格。例如,a顺时针旋转到z,逆时针旋转到b。咕咕东手里有一个字符串,但是他太笨了,所以他来请求你的帮助,问最少需要转多少次。
在这里插入图片描述

输入格式
输入只有一行,是一个字符串。

输出格式
输出最少要转的次数。

输入示例

zeus

输出示例

18

解题思路
这道题的思路其实可以很多,而且不难。
本人选择直接预处理每个字母到其他字母的距离,组合成一个二阶数组,要用的时候提取出来就好了。

#include<iostream>
#include<string>
#include<cstring>

using namespace std;

string input;

//A B C D E F G
//H I J K L M N=13[12]
//O P Q   R S T
//U V W   X Y Z
int dis[26][26];

int CtoI(char letter)
{
	int out;
	if(letter>='A'&&letter<='Z')
	{
		out=letter-'A';
		return out;
	}
	if(letter>='a'&&letter<='z')
	{
		out=letter-'a';
		return out;
	}
}

int main()
{
    memset(dis,0,sizeof(dis));
	
	int t;
	for(int l=0;l<=25;l++)
	{
		t=0;
		for(int i=l;i<=25;i++)
		{
			dis[l][i]=t;
			dis[i][l]=t;
			if(i<13+l)
			{
				t++;
			}
			else
			{
				t--;
			}
		}
	}

	cin>>input;
	
	int ans=0;
	
	int last=0;
	int now=0;
	for(int i=0;i<input.length();i++)
	{
		now=CtoI(input[i]);
		ans+=dis[last][now];
		last=now;
	}
	
	cout<<ans;
	
	
	return 0;
}
发布了21 篇原创文章 · 获赞 3 · 访问量 413

猜你喜欢

转载自blog.csdn.net/qq_44506233/article/details/104981905