Loading

[2024-05-31]Amr and Pins题解

题意翻译

给定一个半径为 的圆,圆心在 处。每次可以把圆固定在圆内的某点选择任意度数,使圆心移动到 处。求最小旋转次数。

img

思路

  • 核心思路:两点之间线段最短。
  • 圆每次旋转后的圆心都落在圆心与目标点的连线上,可以使得旋转次数最小。
  • 圆每次旋转可移动 的距离,即直径。
  • 计算出初始圆心与目标点的距离 ,---。
  • 便是最少次数,此处使用向上取整是为了补全最后一次不足一个直径的距离。

代码解决

  • c++
#include<bits/stdc++.h>
using namespace std;
double r,x_1,y_1,x_2,y_2;
int main()
{
    cin>>r>>x_1>>y_1>>x_2>>y_2;
    double dx=x_1-x_2,dy=y_1-y_2;
    double d=sqrt(dx*dx+dy*dy);
    cout<<ceil(d/(r*2));
    return 0;
}

  • pascal
program Minimum_Stops;

uses Math;

var
    r, x_1, y_1, x_2, y_2: double;
    dx, dy, d: double;
    stops: integer;

begin
    readln(r, x_1, y_1, x_2, y_2);
    dx := x_1 - x_2;
    dy := y_1 - y_2;
    d := sqrt(dx * dx + dy * dy);
    stops := Ceil(d / (r * 2));
    writeln(stops);
end.

其他

posted @ 2024-09-15 10:26  TommyJin  阅读(7)  评论(0)    收藏  举报