天天看點

杭電1006時鐘問題解答

                 問題主要是求三個針之間的夾角大于摸個度的時間。

此題主要通過相對速度來做            時鐘 每秒鐘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();
		}
	}
}