已知某一天是周几 求给定的一天是周几的算法 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的圆柱. ...
随机推荐
- Hadoop学习资料收集
1.漫画HDFS工作原理 http://blog.csdn.net/netcoder/article/details/7442779 2.马哥教育 http://mageedu.blog.51cto ...
- linux中断--进程上下文和中断上下文
一.前言 中断发生以后,CPU跳到内核设置好的中断处理代码中去,由这部分内核代码来处理中断.这个处理过程中的上下文就是中断上下文. 为什么可能导致睡眠的函数都不能在中断上下文中使用呢? 首先睡眠的含义 ...
- WireShark抓包软件的使用
在大学的时候学习的计算机网络的具体的知识,也使用过wireshark去抓取一些网络的封包用来分析,但是都没能系统的写一篇博客,今天总结一下吧. wireshark介绍 wireshark的官方下载网站 ...
- 00UILabel控件的详解
文本属性 1.text:label显示的文字 2.font:text的字体,值不可以为nil,否则异常 3.textColor:text的颜色 4.textAlignment;text的对其方式 5. ...
- python手记(51)
python通过声音将文件内容隐藏,实现原理是将文件的内容分别插入到声音文件的不同位置中做为当次采样的数据,目前是对英文文本文档加解密 #!/usr/bin/env python # -*- codi ...
- openstack中文文档
http://www.openstack.cn/p392.html openStack Hacker中文文档 http://docs.mirantis.com/fuel-dev/develop/a ...
- rootvg 镜像
具体操作步骤如下 : a) 查看一下当前可用的硬盘: # lspv hdisk0 0002d74f0e69d97a rootvg ...
- Android中Gallery显示手机中的图片
在网上找了好久似乎都没有关于这方面的(可能是自己的信息量太小吧),于是自己来填补这个漏洞吧. 常见的方法莫过于自己定义一个数组,用以存储图片的引用,如: 1 private Integer[] pic ...
- hdu 5591 ZYB's Game
Problem Description ZYB played a game named NumberBomb with his classmates ,N] in mind,then players ...
- iOS使用sqlite3原生语法进行增删改查以及FMDB的使用
首先要导入libsqlite3.dylib并且加入头文件#import <sqlite3.h>,在进行增删改查之前还要先把数据库搞进去. 一种方法是从外面拷贝到程序里:http://www ...