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. Sql语句备份Sqlserver数据库

    BACKUP DATABASE [POS_YiZhuang]TODISK = N'C:\数据库\POS_YiZhuang2016-09-20-3.bak'WITHNAME = N'POS_YiZhua ...

  2. Python学习笔记(二)-Python文件类型及编程模式

    Python环境搭建:linux,Windows... Linux下:[root@localhost StudyPython]# python #进入交互模式Python 2.7.11 (defaul ...

  3. spring MVC 环境搭建

    绿色版Spring MVC(单纯的springMVC) 一.导包,为了获取请求数据多添加一个包 二.web.xml配置 <?xml version="1.0" encodin ...

  4. 用gdb调试python多线程代码-记一次死锁的发现

    | 版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.如有问题,可以邮件:wangxu198709@gmail.com 前言 相信很多人都有 ...

  5. 读书笔记-你不知道的JS上-this

    关于this 与静态词法作用域不用,this的指向动态绑定,在函数执行期间才能确定.感觉有点像C++的多态? var a = 1; var obj = { a: 2, fn: function() { ...

  6. python爬虫如何入门

    学爬虫是循序渐进的过程,作为零基础小白,大体上可分为三个阶段,第一阶段是入门,掌握必备的基础知识,第二阶段是模仿,跟着别人的爬虫代码学,弄懂每一行代码,第三阶段是自己动手,这个阶段你开始有自己的解题思 ...

  7. Ionic3 遇到的一些错误-submodule update -q --init --recursive

    解决方法: ionic start myTabs tabs --skip-deps cd .\myTabs cnpm install --save-dev ionic serve > npm i ...

  8. scp命令,用来在本地和远程相互传递文件,非常方便

    scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器 ...

  9. Leetcode题解(四)

    12/13.Integer to Roman/Roman to Integer 题目 罗马数字规则: 符号 I V X L C D M 数字 1 5 10 50 100 500 1000 代码如下: ...

  10. sed基本常用命令

    sed的基本操作 sed 's/a/b/g' 文件a 把文件a中的a修改成b 注意这只是临时的 注:s就是所有的意思,g是缓存区的意思 sed -i 's/a/b/g' 文件a 把文件a中的a修改成b ...