已知某一天是周几 求给定的一天是周几的算法 C++实现
#include<iostream>
using namespace std; struct Date{
int year,month,day;
}; enum Week{
MON=,
TUE,
WED,
THU,
FRI,
SAT,
SUN,
}; int isLeapYear(int y)
{
if((y%==&&y%!=)||y%==)return ;
else return ;
} int DaysGone(Date d,int *restdays)
{/*
*返回值是某个日期在一年中是第多少天
*restdays是这年还剩多少天
*/
int leap=;
int days;
if(isLeapYear(d.year))leap=;
switch(d.month){
case :days=d.day;break;
case :days=d.day+;break;
case :if(leap)days=d.day++;
else days=d.day++;
break;
case :if(leap)days=d.day+++;
else days=d.day+++;
break;
case :if(leap)days=d.day++++;
else days=d.day++++;
break;
case :if(leap)days=d.day+++++;
else days=d.day+++++;
break;
case :if(leap)days=d.day++++++;
else days=d.day++++++;
break;
case :if(leap)days=d.day+++++++;
else days=d.day+++++++;
break;
case :if(leap)days=d.day++++++++;
else days=d.day++++++++;
break;
case :if(leap)days=d.day+++++++++;
else days=d.day+++++++++;
break;
case :if(leap)days=d.day++++++++++;
else days=d.day++++++++++;
break;
case :if(leap)days=d.day+++++++++++;
else days=d.day+++++++++++;
break;
}
if(leap)*restdays=-days;
else *restdays=-days;
return days;
} int ComputeDays(Date early,Date later)
{
int leapcount=;
int y,earlyrestdays=,laterrestdays=,latergonedays=;
int result;
for(y=early.year+;y<later.year;y++)
if(isLeapYear(y))leapcount++;//不包含要求计算的两年
DaysGone(early,&earlyrestdays);
latergonedays=DaysGone(later,&laterrestdays);
result=latergonedays+earlyrestdays;
result+=(later.year-early.year-)*+leapcount;
return result;
} int WhoEarly(Date d1,Date d2)
{//d1早则返回1,d2则0,=则-1
int res=;
int y,m,d;
y=d1.year-d2.year;
m=d1.month-d2.month;
d=d1.day-d2.day;
if(y<)res=;
else if(y==){
if(m<)res=;
else if(m==){
if(d<)res=;
else if(d==)res=-;
else res=;
}//else if
else res=;
}//else if
else res=;
} int Mod7(Date d1,Date d2,int weekday)
{//此处d1是周几为已知数weekday
int tmp,res;
tmp=WhoEarly(d1,d2);
if(tmp==-)res=;
else if(tmp==)res=ComputeDays(d1,d2)%;
else res=-ComputeDays(d2,d1)%;
switch(weekday){
case MON:res=(res+)%;break;
case TUE:res=(res+)%;break;
case WED:res=(res+)%;break;
case THU:res=(res+)%;break;
case FRI:res=(res+)%;break;
case SAT:res=(res+)%;break;
case SUN:res=(res+)%;break;
}
return res;
} /*
*程序没有进行错误检查
*/
int main()
{
Date d1,d2;
int week,res;
printf("enter a date:year month day=======");
scanf("%d%d%d",&d1.year,&d1.month,&d1.day);
printf("week ?");
scanf("%d",&week);
printf("enter another date but don't know on which weekday======");
scanf("%d%d%d",&d2.year,&d2.month,&d2.day);
res=Mod7(d1,d2,week);
printf("it's ");
switch(res)
{
case MON:printf("MON\n");break;
case TUE:printf("TUE\n");break;
case WED:printf("WED\n");break;
case THU:printf("THU\n");break;
case FRI:printf("FRI\n");break;
case SAT:printf("SAT\n");break;
case SUN:printf("SUN\n");break;
}
return ; }
已知某一天是周几 求给定的一天是周几的算法 C++实现的更多相关文章
- 已知ip地址和其子网掩码如何求网络号子网号主机号
已知ip地址为10.130.89.95,其子网掩码为255.255.255.224,求其网络号.子网号和主机号. 要看子网掩码变长在第几节,255.255.255.224是在第四节借了位 把224转换 ...
- 已知空间三点组成的面求该面上某点的Z值
已知空间三点,那么可以就可以确定空间三点组成的平面.此时可以根据某一点的X值和Y值,来求取该点在平面上的Z值.这个过程对于求三角面片上某点的高程或者权值特别有用,其本身也可以看作一种线性插值. 其算法 ...
- DS Tree 已知先序、中序 => 建树 => 求后序
参考:二叉树--前序和中序得到后序 思路历程: 在最初敲的时候,经常会弄混preorder和midorder的元素位置.大体的思路就是在preorder中找到根节点(根节点在序列的左边),然后在mid ...
- DS实验题 Order 已知父节点和中序遍历求前、后序
题目: 思路: 这题是比较典型的树的遍历问题,思路就是将中序遍历作为位置的判断依据,假设有个节点A和它的父亲Afa,那么如果A和Afa的顺序在中序遍历中是先A后Afa,则A是Afa的左儿子,否则是右儿 ...
- C++ 已知两个时间(年月日)求日期差
转载:https://blog.csdn.net/flyyufenfei/article/details/79796035 #include<iostream> #include < ...
- PAT 甲级 1020 Tree Traversals (25 分)(二叉树已知后序和中序建树求层序)
1020 Tree Traversals (25 分) Suppose that all the keys in a binary tree are distinct positive integ ...
- DS Tree 已知后序、中序 => 建树 => 求先序
注意点: 和上一篇的DS Tree 已知先序.中序 => 建树 => 求后序差不多,注意的地方是在aftorder中找根节点的时候,是从右往左找,因此递归的时候注意参数,最好是拿纸和笔模拟 ...
- 已知可生成0~4的rand5(),实现生成0~6的rand7()
若已知生成0~6的rand7(),求生成0~4的rand5(),则一个方法就是不断生成0~7的数,直到这个数满足0~4就返回. int rand5(){ int res; do{ res = rand ...
- poj1190,DFS/已知一个等式,求另一个最小值
7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱. ...
随机推荐
- struts2源码调试环境的搭建
源码之前,了无秘密. 说一句逼格很高的话来镇镇场子. 这两天在看陆舟的<Struts2技术内幕>,一边看脑子一边冒出四个字:相见恨晚.极力推荐想了解Struts2的人看看这本书,之前一直在 ...
- discuz二次开发笔记(二)------跳转函数运用
前几天在增加修改功能时,突然用到一个提示函数,有点不理解,看了他的由来后果断做下笔记,感觉这在以后的开发中肯定还是要用的上的.有些地方不是很理解,在以后慢慢纠正.查补. Htm页面中用的js跳转: $ ...
- 网站建设之Django搭建与配置
总是忘记一些问题解决的细节,终于发现做笔记的必要了.一步一步慢慢写,慢慢积累吧.从开始接触计算机,从硬件到系统到软件,遇到的问题真心不算少了,都记下来的话也得有本书厚了. Linux Version: ...
- Github 常用命令
小记一些Github常用命令 : 在一个项目中... 假如要修补问题追踪系统上的 #53 问题.顺带说明下,Git 并不同任何特定的问题追踪系统打交道.这里为了说明要解决的问题,把新建的分支取名为 i ...
- box-shadow 给图片添加内部阴影
box-shadow 是css3中定义的设置元素阴影的属性,其语法结构如下: <shadow> = inset? && <length>{2,4} && ...
- 数据结构-B树
1.前言: 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ) ...
- 修改默认的undo_retention参数设置
昨天,一个朋友的数据库数据被误操作删除掉了,请求我帮忙进行恢复. 数据库版本是Oracle10g Release 2的,我首先想到的是使用Flashback Query进行闪回恢复,不幸的是ORA-0 ...
- Tomcat Remote Debug操作和原理
操作篇 这部分主要讲,如何开启tomcat远程调试,并佐以实例.本文方式适用于windows和linux. 假设有两台机器,A是tomcat服务器所在机器,B是IDE安装机器.A和B可以是同一台机器, ...
- android中利用view画出一条竖线
在android中有时候需要通过线条来分割控件.最常见的情形就是在底部选项卡的多个button中间,通过加入一条竖线加以区分或者是在头部导航添加 竖线,将返回键和其他内容区分开来.一般会通过image ...
- 在Linux下sqlplus 登录时显示SID 和用户名
一般显示为: SQL> show user USER 为 "SYS" SQL> 在 $ORACLE_HOME/sqlplus/admin目录下 编辑glogin.sql ...