5个回答
展开全部
private void timer1_Tick(object sender, EventArgs e)
{
//在timer控件中
label1.Text = System.DateTime.Now.ToLongTimeString();//获取时间
string str = label1.Text;
int h = Convert.ToInt16(str.Substring(0, 2));//求出小时
if (h > 12) h = h - 12;//使小时保持在12内
int m = Convert.ToInt16(str.Substring(3, 2));//求出分钟
int s = Convert.ToInt16(str.Substring(6, 2));//求出秒钟
if ((6 * s == 6 * m) && (6 * s == 30 * h) && (6 * m == 30 * h))//判断角度是否相等
//小时:角度=360*(h/12)
//分钟:角度=360*(m/60)
//秒钟:角度=360*(s/60)
MessageBox.Show("时针、分针、秒针重合了", "提示");
label2.Text = h.ToString();
label3.Text = m.ToString();
label4.Text = s.ToString();
}
{
//在timer控件中
label1.Text = System.DateTime.Now.ToLongTimeString();//获取时间
string str = label1.Text;
int h = Convert.ToInt16(str.Substring(0, 2));//求出小时
if (h > 12) h = h - 12;//使小时保持在12内
int m = Convert.ToInt16(str.Substring(3, 2));//求出分钟
int s = Convert.ToInt16(str.Substring(6, 2));//求出秒钟
if ((6 * s == 6 * m) && (6 * s == 30 * h) && (6 * m == 30 * h))//判断角度是否相等
//小时:角度=360*(h/12)
//分钟:角度=360*(m/60)
//秒钟:角度=360*(s/60)
MessageBox.Show("时针、分针、秒针重合了", "提示");
label2.Text = h.ToString();
label3.Text = m.ToString();
label4.Text = s.ToString();
}
展开全部
这是一个典型的追击问题,初看起来似乎很复杂要所有的指针都重合才可以,但是可以细分:在所有时针与分针重合的情况下分针与秒针重合才可以认为3针重合也就是说3针重合是两两指针重合的交集,这也就涉及到了追击问题:只有在分针追上时针的总距离等于秒针追上分针的总距离相等的时候才会认为3针重合.现在我们定义一个距离单位n(一圈等于60n)时针的速度是5n/h分针是60n/h秒针是3600n/h.由追击时间=追击路程/速度差得在第i分钟秒针追击到分针的时间为i/(3600 - 60)单位h距离为i/(3600 - 60) * 3600 同理在第j小时分针追到时针的时间为(j * 5)/(60 - 5)单位h距离为(j * 5)/(60 - 5) * 60在两个距离相等的情况下则视为3针重合.这里因为表的特殊性所以有快的指针会有且只有一次会超过慢的指针其他的一些特殊性就不说了.下面是代码:
for (int j = 0; j <= 24; j++)
{
int beginningDistance1;
double distance1;
if (j >= 12)
beginningDistance1 = 5 * (j % 12);
else
beginningDistance1 = 5 * j;
distance1 = beginningDistance1 / (60 - 5) * 60; //这里只是表示一下公式没意义
for (int i = 0; i < 60; i++)
{
double distance2 = i / (3600 - 60) * 3600; ////这里只是表示一下公式没意义
if ((beginningDistance1 * (3600 - 60) * 3600) == ((60 - 5) * 60 * i)) //为什么不直接比较distance1和distance2是因为double会有精度问题
Console.WriteLine("在"+j + "时重合");
}
}
for (int j = 0; j <= 24; j++)
{
int beginningDistance1;
double distance1;
if (j >= 12)
beginningDistance1 = 5 * (j % 12);
else
beginningDistance1 = 5 * j;
distance1 = beginningDistance1 / (60 - 5) * 60; //这里只是表示一下公式没意义
for (int i = 0; i < 60; i++)
{
double distance2 = i / (3600 - 60) * 3600; ////这里只是表示一下公式没意义
if ((beginningDistance1 * (3600 - 60) * 3600) == ((60 - 5) * 60 * i)) //为什么不直接比较distance1和distance2是因为double会有精度问题
Console.WriteLine("在"+j + "时重合");
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
参考
http://wenku.baidu.com/view/7ee1bb0955270722182ef706.html
double dH, dM, dS;
for( int i=0;i<=11;i++)
{
dH = i;
dM = dH * 60.0 /11.0;
dS = dM *5;
if (dM >= 60.0) dH++;
dM = int(floor(dM)) % 60;
dS = int(floor(dS)) % 60;
printf("%.0f:%.0f:%.0f\n",dH, dM, dS);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
按秒数循环:3600秒*24小时,判断时针、分针、秒针的角度是否相等
假设当前L小时M分N秒
秒针角度:360/N
分针角度:360/M
时针:360/12/(N%12)
假设当前L小时M分N秒
秒针角度:360/N
分针角度:360/M
时针:360/12/(N%12)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
时分秒相等的时候!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询