用java实现:一个闹钟12小时内,时分秒三跟指针同时在一条直线上有几次?分别是什么时刻?

解决方案 »

  1.   


    for(int h = 1; h <= 12; h++) {
       for(int m = 1; m <= 12; m++) {
          for(int s = 1; s <= 12; s++) {
             int d = s + s <= 6 || s == 12 ? 6 : -6;
             if((h == d || h == s) && (m == d || m == s))
                System.out.println("直线");
          }
       } 
    }不知道对不对
      

  2.   


    int ho = 0;
    int mi = 0;
    int se = 0;
    int count = 0;
    for(int h = 0; h <= 23; h++) {
    ho = h;
       for(int m = 0; m <= 23; m++) {
       mi = m;
          for(int s = 0; s <= 23; s++) {
           se = s;
         if(h>12)
         ho = h - 12;
         if(m>12)
         mi = m -12;
         if(s>12)
         se = s -12;
         if(ho == mi && ho == se && se == mi){
         System.out.println(h+"时"+m+"分"+se+"秒");
          count++;
         }
         }
       } 
    }
    System.out.println("共有"+count+"次");0时0分0秒
    1时1分1秒
    1时1分1秒
    1时13分1秒
    1时13分1秒
    2时2分2秒
    2时2分2秒
    2时14分2秒
    2时14分2秒
    3时3分3秒
    3时3分3秒
    3时15分3秒
    3时15分3秒
    4时4分4秒
    4时4分4秒
    4时16分4秒
    4时16分4秒
    5时5分5秒
    5时5分5秒
    5时17分5秒
    5时17分5秒
    6时6分6秒
    6时6分6秒
    6时18分6秒
    6时18分6秒
    7时7分7秒
    7时7分7秒
    7时19分7秒
    7时19分7秒
    8时8分8秒
    8时8分8秒
    8时20分8秒
    8时20分8秒
    9时9分9秒
    9时9分9秒
    9时21分9秒
    9时21分9秒
    10时10分10秒
    10时10分10秒
    10时22分10秒
    10时22分10秒
    11时11分11秒
    11时11分11秒
    11时23分11秒
    11时23分11秒
    12时12分12秒
    13时1分1秒
    13时1分1秒
    13时13分1秒
    13时13分1秒
    14时2分2秒
    14时2分2秒
    14时14分2秒
    14时14分2秒
    15时3分3秒
    15时3分3秒
    15时15分3秒
    15时15分3秒
    16时4分4秒
    16时4分4秒
    16时16分4秒
    16时16分4秒
    17时5分5秒
    17时5分5秒
    17时17分5秒
    17时17分5秒
    18时6分6秒
    18时6分6秒
    18时18分6秒
    18时18分6秒
    19时7分7秒
    19时7分7秒
    19时19分7秒
    19时19分7秒
    20时8分8秒
    20时8分8秒
    20时20分8秒
    20时20分8秒
    21时9分9秒
    21时9分9秒
    21时21分9秒
    21时21分9秒
    22时10分10秒
    22时10分10秒
    22时22分10秒
    22时22分10秒
    23时11分11秒
    23时11分11秒
    23时23分11秒
    23时23分11秒
    共有90次
      

  3.   


    public class Test {
    public static void main(String[] args) {
    double aH = 0;
    double aM = 0;
    double aS = 0;
    int count = 0;
    for(int h = 0; h <= 23; h++) {
       for(int m = 0; m <= 23; m++) {
          for(int s = 0; s <= 23; s++) {
           aH = getHourAngle(h,m);
           aM = getMinAngle(m,s);
           aS = getSecondAngle(s);
                if(aH>180)
                 aH = aH-180;
                if(aM>180)
                 aM = aM -180;
                if(aS>180)
                 aS = aS - 180;
           if(aH==aM && aH == aS && aM==aS){
           System.out.println(h+"时"+m+"分"+s+"秒"); 
           count++;
              }
         }
       } 
    }
    System.out.println("共有"+count+"次");
    }
    //计算小时角度,每小时时针走30度,每分钟时针走0.5度
      public static double getHourAngle(int h,int m){
      if(h>=12)
      h = h-12;
      double angle = 0;
      angle = h*30;
      angle = angle+m*0.5;
      return angle;
      }
    //计算分钟角度,每分钟分针走6度,每秒钟分针走0.5度
      public static double getMinAngle(int m,int s){
      double angle = 0;
      angle = m*6;
      angle = angle+s*0.5;
      return angle;
      }
     //计算秒钟角度,每秒钟秒针走6度
      public static double getSecondAngle(int s){
      return s*6;
      }
    }0时0分0秒
    12时0分0秒
    共有2次不知道对不对
      

  4.   

    不好意思又粗心了
     for(int h = 0; h <= 23; h++) {
               for(int m = 0; m <= 23; m++) {
                  for(int s = 0; s <= 23; s++) {
    分和秒应该循环到59,应改为for(int h = 0; h <= 23; h++) {
               for(int m = 0; m <= 59; m++) {
                  for(int s = 0; s <= 59; s++) {不过结果都一样
      

  5.   


    import java.text.SimpleDateFormat;
    import java.util.Date;/*
     * 一个闹钟12小时内,时分秒三跟指针同时在一条直线上有几次?分别是什么时刻?
     */
    public class Test {
    /*
     * 12个小时=12*60*60*1000ms
     */
    final static int TIME=12*60*60*1000;
    //每一毫秒所经历的角度
    final static double SEC=0.006;
    final static double MIN=SEC/60;
    final static double HOUR=MIN/12;
    public static void main(String[] args) {
    for(int i =0;i<=TIME;i++){
    double secDir=SEC*i%180;
    double minDir=MIN*i%180;
    double hourDir=HOUR*i%180;
    /*
     * 直线上分以下几种情况:
     * 三个重合
     * 时/分重合,秒180度
     * 时/秒重合,分180度
     * 分/秒重合,时180度
     * 无论哪种情况都是三个指针角度对180度求余相等。
     */
    if(Math.abs(secDir-minDir)<0.001&&Math.abs(minDir-hourDir)<0.001){
    System.out.println(new SimpleDateFormat("HH:mm:ss").format(new Date(i)));
    }
    }
    }
    }输出结果应该是00:00:00
    06:00:00
    12:00:00但是我时区设置貌似有点问题,直接new Date(0L)打印出来的是1970年1月1日早上8点,很囧。
    导致输出结果成了:
    08:00:00
    14:00:00
    20:00:00
      

  6.   


    很简单,1:06的时候时钟和分钟是重合,但是重合的只有一瞬间(肯定不到1m,最低甚至1ms)。这1ms的时候很可惜的是秒钟指的方向和他们不在一条直线上
      

  7.   


    public class Test {
    public static void main(String[] args) {
    double aH = 0; //时针角度
    double aM = 0; //分针角度
    double aS = 0; //秒针角度
    int count = 0; //在一条直线次数
    for (int h = 0; h <= 23; h++) {
    for (int m = 0; m <= 59; m++) {
    for (int s = 0; s <= 59; s++) {
    aH = getHourAngle(h, m);
    aM = getMinAngle(m, s);
    aS = getSecondAngle(s);
    if (aH >= 180)
    aH = aH - 180;
    if (aM >= 180)
    aM = aM - 180;
    if (aS >= 180)
    aS = aS - 180;
    if (aH == aM && aH == aS && aM == aS) {
    System.out.println(h + "时" + m + "分" + s + "秒");
    count++;
    }
    }
    }
    }
    System.out.println("共有" + count + "次");
    } /**
     * 计算时针角度,秒不影响时针角度,每过1小时时针走30度,每过1分钟时针走0.5度,时针角度=小时*30+分钟*0.5
     * @param h 小时
     * @param m 分钟
     * @return 时针角度
     */
    public static double getHourAngle(int h, int m) {
    if (h >= 12)
    h = h - 12;
    double angle = 0;
    angle = h * 30;
    angle = angle + m * 0.5;
    return angle;
    } /**
     * 计算分针角度,小时对分针没影响,每过一分钟分针走6度,每过一秒钟分针走0.1度,分针角度=分钟*6+秒*0.1
     * @param m 分钟
     * @param s 秒
     * @return 分针角度
     */
    public static double getMinAngle(int m, int s) {
    double angle = 0;
    angle = m * 6;
    angle = angle + s * 0.1;
    return angle;
    } /**
     * 计算秒针角度,小时和分钟对秒针都没影响,每过一秒钟秒针走6度,秒针角度=秒*6
     * @param s 秒
     * @return 秒针角度
     */
    public static double getSecondAngle(int s) {
    return s * 6;
    }
    }
    0时0分0秒
    6时0分0秒
    12时0分0秒
    18时0分0秒
    共有4次
      

  8.   

    秒针是间隔的单点数据,1—~60之间的60个整数,int型
    但分针与时针数连续的一段数据 float型或double
    分针是1————————60 分钟, 1,0003
     时针是1-12点1.2323float类型的小数位都不确定,怎么循环,题目不明确