转圈方向

描述

一个动点开始位于坐标原点处,接下来它将按照预先定义好的路径运动,最终会回到原点位置。定义好的路径以一串字符串表示,其中N表示向上移动,S表示向下移动,E表示向右移动,W表示向左移动。每次移动距离均是1个单位长度。

当运动结束回到原点时请你判断这次运动是顺时针方向还是逆时针方向。

注意:数据保证最终回到原点,并且除了原点外其他任何走过的点不会被再次走到。

错误思路

判断第一次的方向,向左就cout<<0,右就cout<<1
向上或向下就找第一个左右来判断
这样明显有问题
比如image

正确思路

这题其实很水,只需判断左拐次数和右拐次数哪个大就行了
左大就是1,右大就是0

AC CODE

#include<bits/stdc++.h>
using namespace std;
int main() {
    int t;
    cin >> t;
    while (t--) {
        string s;
        cin >> s;
        int l = 0, r = 0;
        for (int i = 0; i < s.size() - 1; i++) {
            if (s[i] == 'N' && s[i + 1] == 'W') {
                l++;
            }
            if (s[i] == 'S' && s[i + 1] == 'E') {
                l++;
            }
            if (s[i] == 'W' && s[i + 1] == 'S') {
                l++;
            }
            if (s[i] == 'E' && s[i + 1] == 'N') {
                l++;
            }

            if (s[i] == 'N' && s[i + 1] == 'E') {
                r++;
            }
            if (s[i] == 'S' && s[i + 1] == 'W') {
                r++;
            }
            if (s[i] == 'W' && s[i + 1] == 'N') {
                r++;
            }
            if (s[i] == 'E' && s[i + 1] == 'S') {
                r++;
            }
        }
        if (l > r) {
            cout << 1 << endl;
        } else {
            cout << 0 << endl;
        }
    }
    return 0;
}

进程已结束,退出代码0

posted on 2024-07-16 11:59  可爱楷玩算法  阅读(48)  评论(0)    收藏  举报

导航