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; }