题目如下:
如图可知,a和b在一个圆里面反向奔跑,求他们的距离的最小值
tips:虽然题目上说的是求a和b的最小距离,但题目的意思并不是a和b的的直线距离而是求a和b最近的弧长。
我们先可以求a和b行走的总距离再用他的周长取余,此时可以求出来a和b之间的一条弧长,但并不能确认是不是劣弧,后面用if条件判断一下就行了
上代码
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define PI 3.14159
double distance(int r, int va, int vb, int t);//声明
double distance(int r, int va, int vb, int t) {//定义
double newdistance;
newdistance = (va + vb) * t * 1.0;//a和b的总路程
while (1) {//该部分为取余部分,也可以直接调用库函数的fmod函数求浮点数的取余
newdistance = newdistance - 2 * PI * r * 1.0;
if (newdistance < 0) {
newdistance += 2 * PI * r * 1.0;
break;
}
}
if (newdistance > (2 * PI * r - newdistance) && 2 * PI * r - newdistance > 0) {//从两条圆弧选择最小的圆弧
newdistance = 2 * PI * r * 1.0 - newdistance;
}
return newdistance;
}
int main()
{
int r, va, vb, t;
double good;
while (scanf("%d%d%d%d", &r, &va, &vb, &t) != EOF) {
good = distance(r, va, vb, t);//调用
printf("%.2f\n", good);
}
}
题库来自郑州轻工业大学