鱼C论坛

 找回密码
 立即注册
查看: 1483|回复: 2

[已解决]日期类问题,求给定日期是星期几

[复制链接]
发表于 2017-1-29 15:38:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
样例输入:
9 October 2001
样例输出:
Tuesday
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define ISYEAP(x) (x % 4 == 0 && x % 100 != 0) || (x % 400 == 0) ? 1 : 0

  4. int Day_Of_Month[13][2] = {
  5.                                 0,0,
  6.                                 31,31,
  7.                                 28,29,
  8.                                 31,31,
  9.                                 30,30,
  10.                                 31,31,
  11.                                 30,30,
  12.                                 31,31,
  13.                                 31,31,
  14.                                 30,30,
  15.                                 31,31,
  16.                                 30,30,
  17.                                 31,31};//提前保存每月天数

  18. struct Date
  19. {//定义一个结构体存放日期和计算下一天的日期
  20.         int Year;
  21.         int Month;
  22.         int Day;
  23.         void nextDay()
  24.         {//计算下一天的日期
  25.                 Day++;
  26.                 if (Day > Day_Of_Month[Month][ISYEAP(Year)])
  27.                 {//天数超过月份最大天数
  28.                         Day = 1;
  29.                         Month++;
  30.                         if (Month > 12)
  31.                         {
  32.                                 Month = 1;
  33.                                 Year++;
  34.                         }
  35.                 }
  36.         }
  37. };

  38. char week_corresponding[7][20] ={
  39.                                                 "Sunday",
  40.                                                 "Monday",
  41.                                                 "Tuesday",
  42.                                                 "Wednesday",
  43.                                                 "Thursday",
  44.                                                 "Friday",
  45.                                                 "Saturday"};//星期名
  46.                                                
  47. char English_Month[13][20] = {
  48.                                                 "",
  49.                                                 "January",
  50.                                                 "February",
  51.                                                 "March",
  52.                                                 "April",
  53.                                                 "May",
  54.                                                 "June",
  55.                                                 "July",
  56.                                                 "Augest",
  57.                                                 "September",
  58.                                                 "October",
  59.                                                 "November",
  60.                                                 "December"}; //月名

  61. int buf[3001][13][32];// 定义一个三维数组提前存放每个日期相对初始日期走过的天数

  62. int main()
  63. {
  64.         Date tmp;
  65.         int count = 0;//计数器统计与初始日期相隔天数
  66.         tmp.Day = 1;
  67.         tmp.Month = 1;
  68.         tmp.Year = 0;//初试日期是0年1月1日
  69.         while(tmp.Year != 3001)
  70.         {
  71.                 buf[tmp.Year][tmp.Month][tmp.Day] = count;
  72.                 tmp.nextDay();
  73.                 count++;
  74.         }//预处理3000年内日期与初始日期相隔天数
  75.        
  76.         int y,d,m;
  77.         char M[20];
  78.        
  79.         while(scanf("%d %s %d",&y,M,&d) != EOF)
  80.         {
  81.                 for (m = 1;m < 13;m++)
  82.                 {
  83.                         if (strcmp(English_Month[m],M) == 0)
  84.                         {
  85.                                 break;
  86.                         }
  87.                 }//m为月数
  88.                
  89.                 int result = ((buf[y][m][d] - buf[2017][1][29] ) % 7 + 7) % 7;
  90.                 //今天是20170129,星期日。下标为0,计算给定日期的星期下标
  91.                 printf("%s\n",week_corresponding[result]);
  92.         }
  93.         return 0;
  94. }
复制代码


这是我写的,不知道为什么运行结果就是不对
最佳答案
2017-1-30 14:01:12

样例输入:
9 October 2001

scanf("%d %s %d",&y,M,&d) != EOF

楼主样例是 日 月 年 , 代码里是 年月日。

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-1-30 14:01:12 | 显示全部楼层    本楼为最佳答案   

样例输入:
9 October 2001

scanf("%d %s %d",&y,M,&d) != EOF

楼主样例是 日 月 年 , 代码里是 年月日。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-4 23:52:59 | 显示全部楼层
Pz-ssa 发表于 2017-1-30 14:01
样例输入:
9 October 2001

哦哦,谢谢~~我看了好久。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-9 17:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表