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("直线"); } } }不知道对不对
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次
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次不知道对不对
不好意思又粗心了 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++) {不过结果都一样
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
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次
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("直线");
}
}
}不知道对不对
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次
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次不知道对不对
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++) {不过结果都一样
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
很简单,1:06的时候时钟和分钟是重合,但是重合的只有一瞬间(肯定不到1m,最低甚至1ms)。这1ms的时候很可惜的是秒钟指的方向和他们不在一条直线上
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次
但分针与时针数连续的一段数据 float型或double
分针是1————————60 分钟, 1,0003
时针是1-12点1.2323float类型的小数位都不确定,怎么循环,题目不明确