列表

详情


MGJ1. 搬圆桌

描述

现在有一张半径为r的圆桌,其中心位于(x,y),现在他想把圆桌的中心移到(x1,y1)。每次移动一步,都必须在圆桌边缘固定一个点然后将圆桌绕这个点旋转。问最少需要移动几步。

输入描述

一行五个整数r,x,y,x1,y1(1≤r≤100000,-100000≤x,y,x1,y1≤100000)

输出描述

输出一个整数,表示答案

示例1

输入:

2 0 0 0 4

输出:

1

原站题解

C++ 解法, 执行用时: 1ms, 内存消耗: 220KB, 提交时间: 2017-07-25

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <math.h>
#include <limits.h>
#include <malloc.h>

int main(int argc, char const *argv[])
{
    int r,x,y,x1,y1;
    while(scanf("%d",&r) != EOF)
    {
        
        scanf("%d",&x);
        scanf("%d",&y);
        scanf("%d",&x1);
        scanf("%d",&y1);

        float distance = sqrt(pow(x-x1,2)+pow(y-y1,2));
        int result;
        result = distance / (2*r);
        if(result*2*r < distance)result++;
        printf("%d\n", result);
    }
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 344KB, 提交时间: 2022-01-27

#include<stdio.h>
#include<math.h>
int main()
{
    int r,x,y,x1,y1;
    while(scanf("%d%d%d%d%d",&r,&x,&y,&x1,&y1)!=EOF)
    {
        double dis;
        r=r*2;
        dis=sqrt(pow((y1-y),2)+pow((x1-x),2));
        int step=dis/r;
        if(r*step<dis)
            step++;
        printf("%d\n",step);
    }
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 348KB, 提交时间: 2022-07-29

#include<stdio.h>
#include<math.h>
int main()
{
    int r,x,y,x1,y1;
    int temp;
    while(scanf("%d %d %d %d %d",&r,&x,&y,&x1,&y1) != EOF)
    {
    r = 2*r;
    double dis;
    dis = sqrt(pow(x1-x,2)+pow(y1-y,2));
    temp = dis/r;
    if(r*temp<dis)
        temp++;
    printf("%d\n",temp);
    }
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2020-09-21

#include<stdio.h>
#include<math.h>
#define ABS(X, Y) ((X) > (Y) ? (X) - (Y) : (Y) - (X))

int main()
{
    int r, x, y, x1, y1;
    while (scanf ("%d %d %d %d %d", &r, &x, &y, &x1, &y1) != EOF) {
        /* 中心每次可以移动距离是2r作为半径的圆内 */
        unsigned long deltaSqu = ABS(x, x1) * ABS(x, x1) + ABS(y, y1) * ABS(y, y1);

        unsigned int numSqu = deltaSqu / (4 * r * r);
        unsigned int temp = sqrt(numSqu);
        unsigned int out = temp *temp == numSqu ? temp : temp + 1;

        printf ("%d\n", out);
    }
    
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2020-08-04

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() {
    int r, x, y, x1, y1;
    while (scanf("%d %d %d %d %d", &r, &x, &y, &x1, &y1) != EOF) {
        double dist = sqrt(pow((x - x1), 2) + pow((y - y1), 2));
        r *= 2;
        int res =(int)ceil(dist/r);//向上取整
        printf("%d\n",res);
    }
    return 0;
}

上一题