标题:[清理垃圾帖子]
只看楼主
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
结帖率:94.72%
已结贴  问题点数:20 回复次数:9 
[清理垃圾帖子]
-------------

[ 本帖最后由 BlueGuy 于 2015-6-3 20:14 编辑 ]
搜索更多相关主题的帖子: 清理 
2012-03-08 23:12
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:3 
先上题目
What day is it
Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2045    Accepted Submission(s): 602


Problem Description
Today is Saturday, 17th Nov,2007. Now, if i tell you a date, can you tell me what day it is ?

 

Input
There are multiply cases.
One line is one case.
There are three integers, year(0<year<10000), month(0<=month<13), day(0<=day<32).

 

Output
Output one line.
if the date is illegal, you should output "illegal". Or, you should output what day it is.

 

Sample Input
2007 11 17
 

Sample Output
Saturday
程序代码:
#include <stdio.h>
char b[7][10] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
bool m[] = {false,true,false,true,false,true,false,true,true,false,true,false,true};
int main()
{
    int year,month,day;
    while(~scanf("%d%d%d",&year,&month,&day))
    {              
       if((year == 0 || month == 0 || day == 0) || (month == 2 && day>29) ||
        (!m[month] && day == 31) ||
        (!(year%4 == 0 && year%100 != 0 ||year%400 == 0)&&month == 2 && day == 29)
        )
        {
            printf("illegal\n");
            continue;
        }
        if (month<3)
        {
            year -= 1;
            month += 12;
        }
        int c = year/100,y = year%100;
        int w = c/4 - 2*c +y +(y/4) +(26*(month+1)/10) + day-1;
        printf("%s\n",b[(w%7+7)%7]);
    }
}


老大这个可以吗



                                         
===========深入<----------------->浅出============
2012-03-09 15:57
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:3 
你代码中的公式有问题。在计算闰年的后一年时结果会小一天。
建议你还是先用这个公式
y--;
return (y + y / 4 - y / 100 + y / 400 + 1) % 7;

重剑无锋,大巧不工
2012-03-09 17:09
hf201089
Rank: 2
等 级:论坛游民
帖 子:48
专家分:25
注 册:2012-3-4
得分:3 
回复 2楼 laoyang103
if (month<3)
        {
            year -= 1;
            month += 12;
        }
int c = year/100,y = year%100;
int w = c/4 - 2*c +y +(y/4) +(26*(month+1)/10) + day-1;
printf("%s\n",b[(w%7+7)%7]);
这段代码能解释下吗?
没看懂
2012-03-09 19:12
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:0 
回复 楼主 BlueGuy
没bug就行啊, 谢了

我就是真命天子,顺我者生,逆我者死!
2012-03-09 21:17
chan_
Rank: 3Rank: 3
来 自:武汉
等 级:论坛游侠
帖 子:84
专家分:122
注 册:2012-2-29
得分:3 
学习了!
2012-03-09 21:52
achj198781
Rank: 2
等 级:论坛游民
帖 子:18
专家分:42
注 册:2012-3-9
得分:3 
回复 4楼 hf201089
蔡勒(Zeller)公式:是一个计算星期的公式。
随便给一个日期,就能用这个公式推算出是星期几。蔡勒公式如下:
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

公式中的符号含义如下:
w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
c:世纪(前两位数)
y:年(后两位数)
m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1
2012-03-10 00:01
chan_
Rank: 3Rank: 3
来 自:武汉
等 级:论坛游侠
帖 子:84
专家分:122
注 册:2012-2-29
得分:0 
.
2012-03-10 11:46
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
我3楼的话好像让老杨误会了。那不是在说老杨,而是在说BlueGuy。老杨的公式没问题。

重剑无锋,大巧不工
2012-03-10 12:45
xiboliyalang
Rank: 2
等 级:论坛游民
帖 子:10
专家分:54
注 册:2012-3-4
得分:3 
学习了,蔡勒公式,
2012-03-10 14:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-362618-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016233 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved