2964:日历问题

总时间限制: 
1000ms

内存限制: 
65536kB
描述
在我们现在使用的日历中, 闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。例如:1700, 1800, 1900 和 2100 不是闰年,而 1600, 2000 和 2400是闰年。 给定从公元2000年1月1日开始逝去的天数,你的任务是给出这一天是哪年哪月哪日星期几。
输入
输入包含若干行,每行包含一个正整数,表示从2000年1月1日开始逝去的天数。输入最后一行是−1, 不必处理。可以假设结果的年份不会超过9999。
输出
对每个测试样例,输出一行,该行包含对应的日期和星期几。格式为“YYYY-MM-DD DayOfWeek”, 其中 “DayOfWeek” 必须是下面中的一个: "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" 或 "Saturday“。
样例输入
1730
1740
1750
1751
-1
样例输出
2004-09-26 Sunday
2004-10-06 Wednesday
2004-10-16 Saturday
2004-10-17 Sunday
提示
2000.1.1. 是星期六
这题目有好几种思路可解决,只是我从天数开始递减,得到年月日,结果能通过一部分,没找到问题出在哪了。
贴了两个代码。还比较好理解:
代码:
第一个代码是我自己写的,之前提交了一个没通过,还以为这题有毒,还有,我把之前的月份计算改为下标递增求解,测试数据结果都是一样的,但都是AC 不了,也没找出问题。
#include<iostream>
#include<stdio.h>
using namespace std;
int days_of_year[]={,};
int days_of_month[]={,,,,,,,,,,,,/**/,,,,,,,,,,,};
char week[][]={"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};
int isleapyear(int year)
{
if(year%==||(year%==&&year%!=))
return ;
else
return ;
}
int main()
{
int m_days;//距离天数
int weekday;//定义标记当前是星期几 while(true)
{
scanf("%d",&m_days);
weekday=m_days%;
int start_year=,start_month=,start_day=;//定义当前的年月日,随着天数的增加,依次递增,最后达到所要的年份月份日期
if(m_days==-)
{
break;
}
weekday=m_days%;
while(m_days>=days_of_year[isleapyear(start_year)])//计算年
{
m_days-=days_of_year[isleapyear(start_year)];
start_year++;
}
while(m_days>=days_of_month[isleapyear(start_year)*+start_month-])//计算月
{
m_days-=days_of_month[isleapyear(start_year)*+start_month-];
start_month++;
}
start_day=start_day+m_days;//计算天,这个是年月计算后剩下的天数
printf("%d-%02d-%02d %s\n",start_year,start_month,start_day,week[weekday]);
} return ;
}
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring> using namespace std; int days_of_year[] = {,};
int days_of_month[] = {,,,,,,,,,,,,/**/,,,,,,,,,,,};
char days_of_week[][] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" ,"Saturday"}; int main()
{
int day;
int start_year,start_month,start_day,start_week;
int is_leap_year;
while(scanf("%d",&day),day!=-)
{
start_year = ;
start_month = ;
start_day = ;
start_week = ; start_week = (start_week + day) % ; //判断是否闰年
if(start_year % == && !(start_year % == && start_year % != ))
{
is_leap_year = ;
}
else
{
is_leap_year = ;
} while(day >= days_of_year[is_leap_year])
{
start_year ++;
day -= days_of_year[is_leap_year]; //判断是否闰年
if(start_year % == && !(start_year % == && start_year % != ))
{
is_leap_year = ;
}
else
{
is_leap_year = ;
}
} while(day >= days_of_month[is_leap_year* + start_month - ])
{
day -= days_of_month[is_leap_year* + start_month - ];
start_month ++;
} start_day += day; printf("%d-%02d-%02d %s\n",start_year,start_month,start_day,days_of_week[start_week]);
}
return ;
}

代码二:

#include <stdio.h>
int judgeyear(int);
int main()
{
long days;
int i,j;
int mon[][]={{,,,,,,,,,,,,},{,,,,,,,,,,,,}};
int year[]={,};
char day[][]={"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};
int dow;
while(scanf("%ld",&days),days!=-)
{
dow=days%;
days+=;
for(i= ; (days-year[judgeyear(i)])> ; i++)
days-=year[judgeyear(i)];
int t=judgeyear(i);
for(j= ; (days-mon[t][j])> ; j++)
days-=mon[t][j];
printf("%d-%02d-%02ld %s\n",i,j,days,day[dow]);
}
return ;
} int judgeyear(int a)
{
if(a%!= || (a% == && a% !=))
return ;
else
return ;
}

2964:日历问题-poj的更多相关文章

  1. poj 1008:Maya Calendar(模拟题,玛雅日历转换)

    Maya Calendar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 64795   Accepted: 19978 D ...

  2. HOJ 2133&POJ 2964 Tourist(动态规划)

    Tourist Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1503 Accepted: 617 Description A ...

  3. POJ 1008 Maya Calendar

    链接:http://poj.org/problem?id=1008 Maya Calendar Time Limit: 1000MS   Memory Limit: 10000K Total Subm ...

  4. 搜索+剪枝 POJ 1416 Shredding Company

    POJ 1416 Shredding Company Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5231   Accep ...

  5. 【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~

    一.写在前面 自使用android studio开始,就被它独特的依赖方式:compile 'com.android.support:appcompat-v7:25.0.1'所深深吸引,自从有了它,麻 ...

  6. 开源一款简单清爽的日历组件,JavaScript版的

    源码会在最后给出地址,需要的朋友自己去下载.最近项目需要做一个日程安排的功能,就是点击日历的某一天弹出一个录入页面,填完信息后保存当天的日程安排.有日程的日期会有不同的标记(比如加一个背景色啥的).网 ...

  7. FullCalendar日历插件说明文档

    FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发,本文将FullCalendar的常用属性和方法.回调函数等整理成中 ...

  8. 被逼着写的jquery工作日管理日历插件

    因为工作原因,在我刚进入新公司之后,立马要求让我做一个jquery的插件demo.我的天,我面试的可是.net工程师啊.虽然以前接触过js,jquery,但也只是接触过一丢丢啊,没办法,只好硬着头皮上 ...

  9. java基础练习 字符串,控制流,日历,日期等

    1,对基本控制流程的一些练习 package org.base.practice3; import org.junit.Test; /** * Created with IntelliJ IDEA. ...

随机推荐

  1. JavaScript函数之作用域 / 作用链域 / 预解析

    关于作用域和作用链域的问题,很多文章讲的都很详细,本文属于摘录自己觉得对自己有价值的部分,留由后用,仅供参考,需要查看详细信息请点击我给出的原文链接查看原文件 做一个有爱的搬运工~~ -------- ...

  2. 在 JPA、Hibernate 和 Spring 中配置 Ehcache 缓存

    jpa, hibernate 和 spring 时配置 ehcache 二级缓存的步骤. 缓存配置 首先在 persistence.xml 配置文件中添加下面内容: <property name ...

  3. ARM总线方面知识

    AMBA简介 随着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大.数字IC从基于时序驱动的设计方法,发展到基于IP复用的设计方法,并在SOC设计中得到了广泛应用.在基于IP复用的SoC设计中,片 ...

  4. angularJS的一点小笔记

    AngularJS用法:-------------------------------------------------- AngularJS 指令: AngularJS 通过被称为 指令 的新属性 ...

  5. (转)spring事务管理几种方式

    转自:http://blog.csdn.net/jeamking/article/details/43982435 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置 ...

  6. Vue源码后记-vFor列表渲染(1)

    钩子函数比较简单,没有什么意思,这一节搞点大事情 => 源码中v-for的渲染过程. vue的内置指令包含了v-html.v-if.v-once.v-bind.v-on.v-show等,先从一个 ...

  7. django 实现登录时候输入密码错误5次锁定用户十分钟

    在学习django的时候,想要实现登录失败后,进行用户锁定,切记录锁定时间,在网上找了很多资料,但是都感觉不是那么靠谱, 于是乎,我开始了我的设计,其实我一开始想要借助redis呢,但是想要先开发一个 ...

  8. Can you find it?

    Can you find it? Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/10000 K (Java/Others) T ...

  9. 有关CUBLAS中的矩阵乘法函数

    关于cuBLAS库中矩阵乘法相关的函数及其输入输出进行详细讨论. ▶ 涨姿势: ● cuBLAS中能用于运算矩阵乘法的函数有4个,分别是 cublasSgemm(单精度实数).cublasDgemm( ...

  10. 八皇后问题 dfs/递归

    #include <bits/stdc++.h> using namespace std; const int maxn = 55; int ans=0; int vis_Q[maxn]; ...