2964:日历问题-poj
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的更多相关文章
- poj 1008:Maya Calendar(模拟题,玛雅日历转换)
Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 64795 Accepted: 19978 D ...
- HOJ 2133&POJ 2964 Tourist(动态规划)
Tourist Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1503 Accepted: 617 Description A ...
- POJ 1008 Maya Calendar
链接:http://poj.org/problem?id=1008 Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Subm ...
- 搜索+剪枝 POJ 1416 Shredding Company
POJ 1416 Shredding Company Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5231 Accep ...
- 【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~
一.写在前面 自使用android studio开始,就被它独特的依赖方式:compile 'com.android.support:appcompat-v7:25.0.1'所深深吸引,自从有了它,麻 ...
- 开源一款简单清爽的日历组件,JavaScript版的
源码会在最后给出地址,需要的朋友自己去下载.最近项目需要做一个日程安排的功能,就是点击日历的某一天弹出一个录入页面,填完信息后保存当天的日程安排.有日程的日期会有不同的标记(比如加一个背景色啥的).网 ...
- FullCalendar日历插件说明文档
FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发,本文将FullCalendar的常用属性和方法.回调函数等整理成中 ...
- 被逼着写的jquery工作日管理日历插件
因为工作原因,在我刚进入新公司之后,立马要求让我做一个jquery的插件demo.我的天,我面试的可是.net工程师啊.虽然以前接触过js,jquery,但也只是接触过一丢丢啊,没办法,只好硬着头皮上 ...
- java基础练习 字符串,控制流,日历,日期等
1,对基本控制流程的一些练习 package org.base.practice3; import org.junit.Test; /** * Created with IntelliJ IDEA. ...
随机推荐
- asp.net core2.0网站的环境搭建和网站部署
使用到的软件和硬件 1. centos7.3服务器一台 2. xshell.xftp 3. vs2017 4. .NET Core 1. 安装 li ...
- Python3处理HTML获取所需内容
处理HTML页面,经常使用的便是使用beautifulsoup库 pip install beautifulsoup4 执行上述语句下载bs4库 一般请求下来的所需数据都位于tbody的tr标签里,下 ...
- LeetCode 27. Remove Element (移除元素)
Given an array and a value, remove all instances of that value in place and return the new length. D ...
- 在webapi中为Action使用dynamic参数实现Post方式调用
1.在webapi中使用controller/action/id的路径配置,打开文件[App_Start] -[WebApiConfig] config.Routes.MapHttpRoute( na ...
- unity客户端基本框架(转载)
框架概述: 基础系统的框架搭建,其中包括: UI框架(NGUI + MVC) 消息管理(Advanced CSharp Messenger) 网络层框架(Socket + Protobuf ) 表格数 ...
- python抽象篇:面向对象
1.面向对象概述 面向过程编程:根据操作数据的函数或语句块来设计程序的. 函数式编程:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象编程:数据和功能结合起来,用称为对象的东西包 ...
- open-falcon Agent配置文件修改hostname后,还是有其他名称的endpoint
问题 open-falcon Agent在配置文件修改hostname后,log日志中还是发现其他名称的endpoint. 原因 Graph, Gateway组件会引用goperfcounter(gi ...
- Leetcode题解(十八)
51.N-Queens ---------------------------------------------------------------------------------分割线---- ...
- Windows环境下多线程编程原理与应用读书笔记(5)————互斥及其应用
<一>互斥的同步机制 思想:当一个线程获得互斥量了后,其他所有要获取同一个互斥量的线程都处于阻塞状态,直到第一个线程释放互斥量为止. 设想几个线程竞争同一个互斥量,其中一个线程获得了互斥量 ...
- Android 开发笔记___DateUtil——Time
package com.example.alimjan.hello_world; /** * Created by alimjan on 6/30/2017. */ import java.text. ...