#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++实现的更多相关文章

  1. 已知ip地址和其子网掩码如何求网络号子网号主机号

    已知ip地址为10.130.89.95,其子网掩码为255.255.255.224,求其网络号.子网号和主机号. 要看子网掩码变长在第几节,255.255.255.224是在第四节借了位 把224转换 ...

  2. 已知空间三点组成的面求该面上某点的Z值

    已知空间三点,那么可以就可以确定空间三点组成的平面.此时可以根据某一点的X值和Y值,来求取该点在平面上的Z值.这个过程对于求三角面片上某点的高程或者权值特别有用,其本身也可以看作一种线性插值. 其算法 ...

  3. DS Tree 已知先序、中序 => 建树 => 求后序

    参考:二叉树--前序和中序得到后序 思路历程: 在最初敲的时候,经常会弄混preorder和midorder的元素位置.大体的思路就是在preorder中找到根节点(根节点在序列的左边),然后在mid ...

  4. DS实验题 Order 已知父节点和中序遍历求前、后序

    题目: 思路: 这题是比较典型的树的遍历问题,思路就是将中序遍历作为位置的判断依据,假设有个节点A和它的父亲Afa,那么如果A和Afa的顺序在中序遍历中是先A后Afa,则A是Afa的左儿子,否则是右儿 ...

  5. C++ 已知两个时间(年月日)求日期差

    转载:https://blog.csdn.net/flyyufenfei/article/details/79796035 #include<iostream> #include < ...

  6. PAT 甲级 1020 Tree Traversals (25 分)(二叉树已知后序和中序建树求层序)

    1020 Tree Traversals (25 分)   Suppose that all the keys in a binary tree are distinct positive integ ...

  7. DS Tree 已知后序、中序 => 建树 => 求先序

    注意点: 和上一篇的DS Tree 已知先序.中序 => 建树 => 求后序差不多,注意的地方是在aftorder中找根节点的时候,是从右往左找,因此递归的时候注意参数,最好是拿纸和笔模拟 ...

  8. 已知可生成0~4的rand5(),实现生成0~6的rand7()

    若已知生成0~6的rand7(),求生成0~4的rand5(),则一个方法就是不断生成0~7的数,直到这个数满足0~4就返回. int rand5(){ int res; do{ res = rand ...

  9. poj1190,DFS/已知一个等式,求另一个最小值

    7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体.  设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱. ...

随机推荐

  1. 华为S5700基础配置----备份和恢复配置文件

    一:备份配置文件 设备作为FTP服务器,用户PC作为FTP客户端 # 配置设备的FTP功能及FTP用户信息. <HUAWEI> system-view [HUAWEI] ftp serve ...

  2. [Tree]Binary Tree Inorder Traversal

    Total Accepted: 98729 Total Submissions: 261539 Difficulty: Medium Given a binary tree, return the i ...

  3. sql update小结

    以前update用的不少,但都是简单的单表操作,没有在意,最近查阅多表关联更新及更新top n,发现update还真灵活,记录如下(在mssqlserver2008r2下测试通过): 1单表操作  u ...

  4. centos6.7配置git服务器

    1.yum install -y git 2.adduser git 3.cd /data/git 没有则创建该目录 git init --bare test.git;创建一个裸仓库,没有工作区,不需 ...

  5. 在Linux手动把文件转码的方法,防止乱码出现

    iconv -f utf-8 -t gb2312 report.html  >  report_test.html

  6. *循环-01. 求整数段和【help】

    /* * Main.c * 循环-01. 求整数段和 * Created on: 2014年6月18日 * Author: Boomkeeper ***测试木有通过**** */ #include & ...

  7. JNDI(转载)

    转自:http://javacrazyer.iteye.com/blog/759485 原理:         在DataSource中事先建立多个数据库连接,保存在数据库连接池中.当程序访问数据库时 ...

  8. 常用在线工具及API网址总结

    1.小图标在线查找 https://www.iconfinder.com/ 2.在线做图,Flowchart流程图,BPMN图,Org组织结构图等 http://www.processon.com/ ...

  9. 简洁的jsp

    在开发 是使用tomcat7版本(7的jslt表达式语法检查更加严格) 1.去除生产html的不必要的空行 <%@ page trimDirectiveWhitespaces="tru ...

  10. mysql排行榜sql的实现

    SELECT num_rows AS num_rows, openid , openid, money FROM lt_cash_user ) t ORDER BY money DESC ) t1 W ...