算法:泽勒的一致性 给定一个日期,输出这个日期是该年一周中的星期几 【c++ java python版本】
文章目录
- 1、引言
- C++版本:
- Java版本:
- python版:
1、引言
泽勒一致性是由克里斯汀-泽勒开发的用于计算某天是星期几的计算公式。计算公式如下:
h=(q+[26*(m+1)/10]+k+[k/4]+[j/4]+5*j)%7其中:h是一个星期中每一天(0是星期六,1是星期天,2是星期一,3是星期二,4是星期三,5是星期四,6是星期五)
q是某月的天数
m是月份(3为三月,4为四月,……,12为十二月。其中一月和二月分别为上一年的13月和14月。)j是世纪数,即year/100k是世纪的年数,即year%100所求的月份如果是1月或2月,则应视为前一年的13月或14月.
所以公式中m 的取值范围不是1-12,而是3-14.
C++版本:
#include<bits/stdc++.h>
using namespace std;
int main()
{int year,mon,day;while(~scanf("%d/%d/%d",&year,&mon,&day)){if(mon==1){mon=13;year-=1;}else if(mon==2){mon=14;year-=1;}int century=year/100;int yearOfCentury=year%100;int theDayIs = (day + 26 * (mon + 1) / 10 + yearOfCentury + yearOfCentury / 4 + century / 4 + 5 * century) % 7;switch(theDayIs){case 0: cout<<"星期六"<<endl; break;case 1: cout<<"星期天"<<endl; break;case 2: cout<<"星期一"<<endl; break;case 3: cout<<"星期二"<<endl; break;case 4: cout<<"星期三"<<endl; break;case 5: cout<<"星期四"<<endl; break;case 6: cout<<"星期五"<<endl; break;default: cout<<"计算错误!"<<endl;}}return 0;
}
我们来测试一下今天是星期几
输入2020/1/15理想结果:星期三
实际结果:
没问题~
Java版本:
/** 运用泽勒一致性计算某天是星期几?* 公式:* h = (q + 26(m+1)/10 + k +k/4 + j/4 +5j) % 7* 其中:** h是一个星期中每一天(0是星期六,1是星期天,2是星期一,3是星期二,4是星期三,5是星期四,6是星期五)* q是某月的天数* m是月份(3为三月,4为四月,……,12为十二月。其中一月和二月分别为上一年的13月和14月。)* j是世纪数,即year/100* k是世纪的年数,即year%100* */import java.util.Scanner;
public class Zeller {public static void main(String args[]){Scanner imput = new Scanner(System.in);System.out.print("Enter a year: (e.g, 2012): ");int year = imput.nextInt();System.out.print("Enter a mouth: 1-12: ");int mouth = imput.nextInt();System.out.print("Enter the day of the mouth: ");int day = imput.nextInt();int tempMouth = mouth; //一月二月记为13,14,年数记为上一年switch (tempMouth){case 1: mouth = 13; year -=1; break;case 2: mouth = 14; year -=1; break;}int century = year / 100;int yearOfCentury = year % 100;int theDayIs = (day + 26 * (mouth + 1) / 10 + yearOfCentury + yearOfCentury / 4 + century / 4 + 5 * century) % 7;//0为周六1为周日2为周一3为周二4为周三5为周四6为周五switch (theDayIs){ case 0 :System.out.println("Day of the week is Saturday"); break;case 1 :System.out.println("Day of the week is Sunday"); break;case 2 :System.out.println("Day of the week is Monday"); break;case 3 :System.out.println("Day of the week is Tuesday"); break;case 4 :System.out.println("Day of the week is Wednesday"); break;case 5 :System.out.println("Day of the week is Thursday"); break;case 6 :System.out.println("Day of the week is Friday"); break;}}
}
python版:
def calculateDayofWeek(q,m,k,j):h = (q + (26*(m + 1) // 10) + k + (k // 4) + (j // 4) + 5*j) % 7#泽勒一致性return hdef info_enter():year = eval(input("请输入年份:"))j = year // 100#世纪数month = eval(input("请输入月份:"))if month == 1:m = 13k = year % 100 - 1#年份elif month == 2:m = 14k = year % 100 - 1#年份else:m = monthk = year % 100#年份day = eval(input("请输入月份中哪一天:"))q = dayreturn q, m, k, j,day,month,year
if __name__ == "__main__":q,m,k,j,day,month,year = info_enter()#求出日期对应着一个星期的哪一天h = calculateDayofWeek(q, m, k, j)if h == 0:week = 'Saturday'elif h == 1:week = 'Sunday'elif h == 2:week = 'Monday'elif h == 3:week = 'Tuesday'elif h == 4:week = 'Wednesday'elif h == 5:week = 'Thursday'elif h == 6:week = 'Friday'print(str(year)+'-'+str(month)+'-'+str(day)+" is "+week+' of the week.')
学如逆水行舟,不进则退
算法:泽勒的一致性 给定一个日期,输出这个日期是该年一周中的星期几 【c++ java python版本】相关推荐
- Java黑皮书课后题第3章:**3.21(科学:某天是星期几)泽勒一致性...编写程序,提示用户输入年、月、该月的哪一天,显示它是一周中的星期几
**3.21(科学:某天是星期几)泽勒一致性...编写程序,提示用户输入年.月.该月的哪一天,显示它是一周中的星期几 题目 题目概述 运行示例 破题 代码 题目 题目概述 **3.21(科学:某天是星 ...
- 给定一个多边形的点集——判断所给点集的方向为顺时针方向还是逆时针方向【java实现+原理讲解】
问题 给定一个点集,按照索引从小到大的顺序遍历将点集的点相连接可以形成一个多边形.如何判断所给点集的方向是顺时针方向还是逆时针方向呢? 如下图的左图,随着索引的增加,取出来的点绕顺时针排布,类 ...
- 给定一个二叉树的根节点 root ,返回它的 中序 遍历。【LeetCode Hot 100】
力扣热题100之第94题 方法一.递归法: 首先我们得知道什么是二叉树的中序遍历:左子树节点 - 根节点 - 右子树节点.就是遇到节点时,优先遍历该节点的左子树,等遍历完了再到根节点,最后是右子树.如 ...
- html日期横向拖动选择控件,一个简单横向javascript日期控件
具体要求就是: 1.日期表格横向占满页面. 2.每个月的日期列表横向显示在一排,而不是像网上的很多日期控件显示一个方块. 3.要求只有年月日可选,选择年或月后自动更新对应日期(这个每个日期控件都有的) ...
- hive根据日期算哪一年的第几周(年周)以及算周几星期几
一.取年周 按照习惯,跨年的周中的在哪一年的天数多就算哪一年的周,所以日期所在的年不一定是周所在的年,比如2016-01-01是2015年53周. 可以通过以下sql判断跨年的周属于哪一年,实现得到前 ...
- python中如何编写代码输入多个数据并把它们放在一个列表中去_10分钟学习函数式Python...
在这篇10分钟的文章中,您将学习Python中的函数式范型.您还将学习列表推导式. 目录 函数式范式 Python的map函数是如何运行的 Python中的lambda表达式 Python中的redu ...
- 字符转换 提取一个字符串中的所有数字字符('0'……'9'),将其转换为一个整数输出。 首位不能是0
7-3 字符转换 (13分) 本题要求提取一个字符串中的所有数字字符('0'--'9'),将其转换为一个整数输出. 输入格式: 输入在一行中给出一个不超过80个字符且以回车结束的字符串. 输出格式: ...
- 本题要求提取一个字符串中的所有数字字符(‘0‘……‘9‘),将其转换为一个整数输出。
本题要求提取一个字符串中的所有数字字符('0'--'9'),将其转换为一个整数输出. 输入格式: 输入在一行中给出一个不超过80个字符且以回车结束的字符串. 输出格式: 在一行中输出转换后的整数.题目 ...
- 给定一个排序好的数组,插入一个数,使其仍然有规律不使用排序算法
给定一个排序好的数组,插入一个数,使其仍然有规律 不使用排序算法 public class test14 { //数组习题public static void main(String[] args) ...
- 给定一个日期,算出上周五日期
给定一个日期,算出上周五日期 DateTime dt=new DateTime(); for(double loop=0;loop<7;loop++) { dt=DateTi ...
最新文章
- # 异运算_小学数学整数、小数、分数加减法运算法则及练习(可打印)
- php实现tail,Linux-如何用php实现Linux下的tail -f命令?
- 0115互联网新闻 | 王欣发布“马桶MT”;字节跳动发布“多闪”;罗永浩新社交软件“聊天宝”已上架苹果App Store...
- 回到地球之后,这个男人创建了Ubuntu
- C语言程序设计答案黄保和编,C语言程序设计答案(黄保和编)第5章.pdf
- ps右键不显示编辑选项_PS基础教程|视图操作
- 导入项目到IDEA报javax/xml/bind/DatatypeConverter错误?
- 英特尔傲腾驱动下载_什么是英特尔傲腾内存?
- 分享一个百度云加速下载工具
- Winedt为什么可以用pdfLaTex编译中文(pdfLaTex和XeLaTex的使用)
- 页面置换算法java_页面置换算法之Clock算法
- 如何监控网页卡顿和崩溃?
- ►崔凯在转基因食品360度论坛上演讲
- linux怎么添加桌面图标,linux下添加桌面图标
- Vue项目实战:订单列表页面实现
- 数据库(Mysql)的事物详解
- moment.js 时间处理类库--时间戳和时间格式相互转换
- 制作人 Joe Carrell 教你充分释放TB12音色野兽
- 怪文書 / Dubious Document
- Python:1020 月饼