列表

详情


MT37. 魔法表

描述

时辰送给了她的女儿凛一块魔法表,但是魔法表的表针总是指向奇怪的地方,所以凛决定修理一下这块表。当前表的指针指向了一个方向 𝑛1 (在 0 度到 359 度之间,正北方向是 0 度, 正东方向是 90 度),她需要将表针调节到方向 𝑛2 。她可以选择顺时针旋转表针,也可以逆时针旋转表针,若顺时针旋转的话,角度会增大,逆时针旋转则角度会减小。当顺时针旋转 到 359 度后,若再旋转一度,则会回到 0 度。凛想要让表针旋转的角度尽量小,也就是以 最短路径旋转到正确的方向,请你告诉她应该如何旋转。 当有多种旋转方式能够旋到正确的方向,且旋转过的角度相同时,凛会选择顺时针旋转。

数据范围:

输入描述

第一行包含一个整数𝑛1 ,表示表针当前的方向。

第二行包含一个整数𝑛2 ,表示表针应该指向的正确方向。

输出描述

若需要顺时针旋转𝑥度,则输出𝑥;

若需要逆时针旋转𝑥度,输出−𝑥。

示例1

输入:

315
45

输出:

90

示例2

输入:

45
270

输出:

-135

原站题解

C++14 解法, 执行用时: 2ms, 内存消耗: 236KB, 提交时间: 2019-05-18

#include <stdio.h>
int main()
{
    int n1,n2;
    scanf("%d%d",&n1,&n2);
    if (( (n2-n1+360)%360) <= 180)
    {
        printf("%d",(n2-n1+360)%360);
    }
    else
    {
        printf("%d",-(n1-n2+360)%360);
    }
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 304KB, 提交时间: 2021-09-18

#include <stdio.h>

int main()
{
    int n1=0,n2=0;
    int ret = 0;
    while(scanf("%d\n %d",&n1,&n2) != EOF)
    {
        if(n1>=n2)
        {
            if((n1-n2) >= 180)
            {
                printf("%d\n",(n2+360-n1));
            }
            else
                printf("%d\n",(n2-n1));
        }
        else
        {
            if((n2-n1)<=180)
                printf("%d\n",(n2-n1));
            else
                printf("%d\n",(n1+360-n2));
        }
    }
    return 0;
}

上一题