题意
- coordinates - 坐标
- 找到拜访每条街上每个生物的时间最短的路径
街道两边都住着老鼠,但是他一次只能拜访一个方向(双向街道);每个路口任意方向都能选择(包括来的方向),到路的尽头可以折返
没来过的方向速度20 km/h,来过的方向速度50 km/h - 输入
第一行,鼠王办公室的坐标
随后100行,给出街道起点和终点的坐标,遇到java结束输入 - 输出
鼠王他巡查万所有鼠鼠最少要多久,小时:分钟
思路
巡视花最少时间的情况:每条街道都仅去程一次、返程一次
计算每条街道的长度l,hour = l*2/20000 即为最短时间的小时数
小时位输出(int)hour,分钟min = (hour-(int)hour)*60,四舍五入输出(int)(min+0.5)
笔记
scanf("%s", flag)
不用管前面的换行,会自动在末尾补\0
%02d
分钟的输出格式!!
代码
#include<cstdio>
#include<cmath>
#include<string.h>
using namespace std;
int str_to_int(char str[]){
int x=0;
for(int i=0; str[i]!='\0'; i++)
x = x*10 + str[i]-'0';
return x;
}
int main(){
int x_office, y_office, x_begin, y_begin, x_end, y_end;
double l, hour, min;
char flag[100];
while(scanf("%d %d", &x_office, &y_office)!=EOF){
scanf("%s", flag);
hour = 0;
while(strcmp(flag, "java")!=0){
x_begin = str_to_int(flag);
scanf("%d %d %d", &y_begin, &x_end, &y_end);
l = sqrt((y_end-y_begin)*(y_end-y_begin) + (x_end-x_begin)*(x_end-x_begin));
hour += l*2/20000;
scanf("%s", flag);
}
min = (hour - (int)hour)*60;
printf("%d:%02d\n", (int)hour, (int)(min+0.5));
}
return 0;
}