CSP第一次模拟 A 咕咕东的奇遇

题目描述:

有一个圆环,由字母表中字母首尾相接组成。环上有一个指针,最初指向a。每次可顺时针或逆时针旋转一格。例如:a顺时针转到b,逆时针转到z。现在有一个字符串,求需要转多少次可使指针依次指向字符串中的字母。

输入格式:

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

Sample Input:

zeus

输出格式:

输出最少要转的次数。

Sample Output:

18

思路:

将此字符串看作一个环,分别判断从当前位置到目标所在位置是从前走靠近还是从后走靠近,判断标准为其走的距离是否小于字符串一半的长度,挑选较小的那个加入总和即可。

代码:

#include <iostream>
#include <string>

using namespace std;

int main()
{
	char huan[24];
	int now = 0,sum = 0;
	for (int i = 0; i < 26; i++)
		huan[i] = 'a' + i;
	string a;
	cin >> a;
	for (int i = 0; i < a.size(); i++)
	{
		int to = a[i] - 'a';
		int move = to - now;
		if (move > 13)
			sum += 26 - move;	
		if (move < -13)
			sum += 26 + move;
		if (move >= 0 && move <= 13)
			sum += move;
		if (move <= 0 && move >= -13)
			sum -= move;
		now=to;
	}
	cout << sum << endl;
	return 0;
}
发布了32 篇原创文章 · 获赞 0 · 访问量 693

猜你喜欢

转载自blog.csdn.net/qq_43814559/article/details/104977336
今日推荐