c#题目,求高手指点

用程序求出每天时钟上时分秒三个指针重合的时间,用C#实现,求高手指点... 用程序求出 每天时钟上 时分秒三个指针重合的时间,用C#实现,求高手指点 展开
 我来答
简单的程序员
2013-09-17
知道答主
回答量:3
采纳率:0%
帮助的人:2.7万
展开全部
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();

}
fistlong
2013-09-17 · 超过30用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:64.9万
展开全部
这是一个典型的追击问题,初看起来似乎很复杂要所有的指针都重合才可以,但是可以细分:在所有时针与分针重合的情况下分针与秒针重合才可以认为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 + "时重合");
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yasigi
2013-09-17 · TA获得超过208个赞
知道小有建树答主
回答量:262
采纳率:100%
帮助的人:220万
展开全部

参考

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);
    }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
q412718
2013-09-17
知道答主
回答量:30
采纳率:0%
帮助的人:12万
展开全部
按秒数循环:3600秒*24小时,判断时针、分针、秒针的角度是否相等
假设当前L小时M分N秒
秒针角度:360/N
分针角度:360/M
时针:360/12/(N%12)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我的但是832
2013-09-17 · 超过18用户采纳过TA的回答
知道答主
回答量:92
采纳率:0%
帮助的人:15.7万
展开全部
时分秒相等的时候!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式