小明很羡慕那些算命的江湖骗子,因为他们可以看你一眼就知道你的前世今生。
当然,我们知道那些骗子都是察言观色的胡诌。但我们可以帮助小明写一个程序,
算出一个人的生日是星期几,这样小明就可以拿他去忽悠不谙世事的小女生了。

输入
输入多组测试数据,每组数据一行,包括三个整数:年(1个空格)月(1个空格)日。
输入0(1个空格)0(1个空格)0表示结束。

输出
请输出星期几的英文。什么?你不会英文,果然江湖骗子都是土鳖!那就用1,2,3,4,5,6,7表示总可以了吧??!!
样例输入
2013 12 18
2010 2 1
1999 7 24
2008 1 13
0 0 0
样例输出
3
1
6
7
/这道题可以用常规的方法(需要枚举各个月份)/

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{int year,month,day;while (scanf_s("%d %d %d", &year, &month, &day) && year && month && day != 0)/*用scanf()也可scanf_s()在从键盘读取输入时可以不用第三个参数*/{/*基姆拉尔森计算公式Week=(Day + 2*Month + 3*(Month+1)/5 + Year + Year/4 - Year/100 + Year/400) % 7
(其中的Year是4位数的,如2009。“%”号是等式除7取余数)
注意:
i. 该公式中要把1月和2月分别当成:上一年的13月和14月处理。例如:2008年1月4日要换成 2007年13月4日带入公式。
ii.该式对应的与蔡勒公式有点区别:“0”为星期1,……,“6”为星期日。*/if (month <= 2){month += 12;year--;}int week_day = 0;week_day = (year + year / 4 + year / 400 - year / 100 + 2 * month + 3 * (month + 1) / 5 + day) % 7;/*修正week_day与日期的对应关系*/week_day++;printf("%d\n", week_day);}
}

版本_2

/*
2013 12 18
2010 2 1
1999 7 24
2008 1 13
0 0 0
样例输出
3
1
6
7
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>int is_leap_year(int year);
int days_after_0(int year, int month, int day, int(*monthdays)[13]);
int main()
{int ty, tm, td, tw;/*今天当天的参数;w表示周几*/int year, month, day;/*以前某天的参数*/int delta;int sum_pre = 0, sum_now = 0;int year_month[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},/*平年year_month[0]*/{0,31,29,31,30,31,30,31,31,30,31,30,31}/*闰年year_month[1]*/ };while (1){//利用同起点相减法求解printf("输入想要查询的年/月/日:\n");scanf_s("%d %d %d", &year, &month, &day);/*用scanf()也可scanf_s()在从键盘读取输入时可以不用第三个参数*/printf("今天的日期:年/月/日,以及星期几:\n");//scanf("%d%d%d%d", &ty, &tm, &td, &tw);   printf("内部设定为2020 9 7 星期1\n");ty = 2020; tm = 9; td = 7; tw = 1;/*判断是否离开循环:*/if (year || month || day) {}elsebreak;sum_pre = days_after_0(year,year, month, day, year_month);sum_now = days_after_0(year,ty, tm, td, year_month);//printf("%d %d %d->sum = %d\n", year, month, day, sum_pre);/*测试用句*/delta = sum_now - sum_pre;printf("%d %d %d -> sum_now=%d\n%d %d %d -> sum_pre=%d\n", ty, tm, td, sum_now, year, month, day, sum_pre);printf("delta:%d\n", delta);/*打印结果:*/int result = (tw - delta % 7 + 7) % 7;if (result == 0){result = 7;}printf("%d\n", result);}}
int is_leap_year(int year)
{if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0){return 1;}return 0;
}
int days_after_0(int year_pre, int year,int month, int day, int(*monthdays)[13])
{int sum = 0;if (year > year_pre)for (int i = year_pre/*从1优化为year*/; i < year; i++){if (is_leap_year(i))/*小心参数别写作year了(很容易错)*/{sum += 366;}else{sum += 365;}}/*加上当年的月加天:*/for (int i = 1; i < month; i++){if (is_leap_year(year)){sum += monthdays[1][i];}else{sum += monthdays[0][i];}}sum += day;return sum;
}

由年月日计算该日是星期几相关推荐

  1. 给出年月日 计算该日是该年的第几天

    给出年月日 计算该日是该年的第几天 C语言#include <stdio.h> int main() { int sum_day(int month,int day);int leap(i ...

  2. Gym 101206L Daylight Saving Time 根据年月日计算星期

    题意: [3月的第二个周日02:00:00 , 3月的第二个周日03:00:00) 这个区间都不是PST或PDT,[11月的第一个周日01:00:00 , 11月的第一个周日02:00:00) 这个区 ...

  3. java这一年第几天_java 输入年月日,计算该日是这一年的第几天

    1.输入年月日,计算该日是这一年的第几天importjava.util.Scanner;publicclassshiyan2{publicstaticvoidmain(String[]args){in ...

  4. 定义一个结构体变量(包括年月日)。计算该日在 本年中是第几天?注意闰年问题。

    定义一个结构体变量(包括年月日).计算该日在本年中是第几天?注意闰年问题. /**定义一个结构体变量(包括年月日).计算该日在 *本年中是第几天?注意闰年问题. */ #include<stdl ...

  5. 蔡勒公式 java,C/C++根据年月日计算星期几(蔡勒公式篇)

    蔡勒公式  蔡勒(Zeller)公式:是一个计算星期的公式. 随便给一个日期,就能用这个公式推算出是星期几. 蔡勒公式如下: W = [C/4] - 2C + y + [y/4] + [13 * (M ...

  6. ACMNO.42 C语言-第几天 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。利用结构体的在最下面

    题目描述 定义一个结构体变量(包括年.月.日).计算该日在本年中是第几天,注意闰年问题. 输入 年月日 输出 当年第几天 样例输入 2000 12 31 样例输出 366 来源/分类 C语言 题目截图 ...

  7. SWUSTOJ #78 计算生日是星期几

    SWUSTOJ #78 计算生日是星期几 题目 输入 输出 样例输入 样例输出 源代码 题目 编写一个程序,只要输入年月日,就能回答那天是星期几. 能被4整除但不能被100整除的,或者能被400整除的 ...

  8. 题9.1:定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天, 注意闰年问 题。

    题目 本题是谭浩强<C程序设计课后习题>题9.1. 题目: 1.定义一个结构体变量(包括年.月.日).计算该日在本年中是第几天, 注意闰年问 题. 以下是本篇文章正文内容,欢迎朋友们进行指 ...

  9. 给出年月日计算该天是该年的第几天(大学C语言练习

    C语言## 给出年月日计算该天是该年的第几天(大学C语言练习 给出年月日计算该天是该年的第几天(大学C语言练习) #include<stdio.h> //闰年全年366天,平年全年365天 ...

最新文章

  1. Go 语言编程 — Cobra 指令行工具
  2. (9)跨段跳转,短调用和长调用堆栈图
  3. 使用vue脚手架模块化开发
  4. Windows Azure Storage (4) Windows Azure Storage Service存储服务之Blob Share Access Signature
  5. ajax长链接--拉实现
  6. 在HTML中如何把块的边框做成圆角
  7. Spring @Repository批注
  8. CAD二次开发 C# .net dwg批量转dxf
  9. Vue组件(附带轮播图代码)
  10. 第三方接口开发(短信验证码)
  11. 数据分析 - 用户中台(学习笔记)
  12. eclipse设置护眼豆沙色
  13. C# SolidWorks 二次开发 API ---创建异型孔特征
  14. Windows驱动_WDDM之二
  15. 直播报名|美团技术沙龙:美团算法实践——搜索、广告、推荐专场
  16. netstat -i FLG含义
  17. 手撕LongAdder-add()源码
  18. android对象序列化的方法,Android 进阶-两种序列化方式 Serializable 和 Parcelable
  19. 分糖果问题--蓝桥杯
  20. AAAI2021会议马上开放注册了!注意截稿时间!

热门文章

  1. 疫情下的人、工、智、能
  2. 基于应急广播国标协议的IP解析工具
  3. 江湖魔头WriteUp
  4. 给气象局割接搭建短信平台,彩信平台软件
  5. 响应式电子相册翻页特效
  6. 姓雷取名:雷姓好听到爆的女孩名字
  7. 多载波 NOMA 系统总和速率最大化研究
  8. APISpace 将照片转化成漫画风格API
  9. K3后台修改销售模块(销售订单、发货通知单、销售出库单、销售发票)业务员名称语句
  10. 属性编辑器 - 字体设置