問題主要是求三個針之間的夾角大于摸個度的時間。
此題主要通過相對速度來做 時鐘 每秒鐘1/120.0度 分針每秒鐘1/10.0度 秒針每秒6度 相對速度 s_m=59/10 s_h=719/120 m_h=11/120 每一度需要的時間 sm=10/59 sh=120/719 mh=120/11 周期 cycle_sm=3600/59 cycle_sh=360*120/719 cycle_mh=360*120/11 java代碼實作如下:
package com.example.Twochapter;
import java.util.Scanner;
public class Main2 {
public static double Max(double d_sm,double d_sh,double d_mh ){
return (d_sm>d_sh)?(d_sm>d_mh?d_sm:d_mh):(d_sh>d_mh?d_sh:d_mh);
}
public static double Min(double not_d_sm,double not_d_sh,double not_d_mh){
return (not_d_sm>not_d_sh)?(not_d_sh>not_d_mh?not_d_mh:not_d_sh):(not_d_sm>not_d_mh?not_d_mh:not_d_sm);
}
public static void main(String[] args) {
double cycle_sm=3600.0/59,cycle_sh=360*120.0/719,cycle_mh=360*120.0/11;
double sm=10.0/59,sh=120.0/719,mh=120.0/11;
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()){
double happys,happye,sum=0;
int degree = scanner.nextInt();
if(degree==-1) return ;
double d_sm=sm*degree,d_sh=sh*degree,d_mh=mh*degree;//第一次出現滿足夾角大于D度
double not_d_sm=cycle_sm-d_sm,not_d_sh=cycle_sh-d_sh,not_d_mh=cycle_mh-d_mh;//第一次不大于D度
happys=Max(d_sm,d_sh,d_mh);
happye=Min(not_d_sm,not_d_sh,not_d_mh);
while(happys<=43200&&happye<=43200){
happys=Max(d_sm,d_sh,d_mh);
happye=Min(not_d_sm,not_d_sh,not_d_mh);
if(happys<happye)
sum+=happye-happys;//如果 end的 時間比start的 晚,由 sum記錄并累積
if(happye==not_d_sm)
{d_sm+=cycle_sm;not_d_sm+=cycle_sm;}
else if(happye==not_d_sh)
{d_sh+=cycle_sh;not_d_sh+=cycle_sh;}
else if(happye==not_d_mh)
{d_mh+=cycle_mh;not_d_mh+=cycle_mh;}//happy時間end後最慢的指針要提前一個周期才能讓比它快的再次追上
}
System.out.printf("%.3f",sum/43200*100);
System.out.println();
}
}
}