杭电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();
		}
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值