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. asp.net core2.0网站的环境搭建和网站部署

    使用到的软件和硬件 1.       centos7.3服务器一台 2.       xshell.xftp 3.       vs2017 4.       .NET Core   1. 安装 li ...

  2. Python3处理HTML获取所需内容

    处理HTML页面,经常使用的便是使用beautifulsoup库 pip install beautifulsoup4 执行上述语句下载bs4库 一般请求下来的所需数据都位于tbody的tr标签里,下 ...

  3. LeetCode 27. Remove Element (移除元素)

    Given an array and a value, remove all instances of that value in place and return the new length. D ...

  4. 在webapi中为Action使用dynamic参数实现Post方式调用

    1.在webapi中使用controller/action/id的路径配置,打开文件[App_Start] -[WebApiConfig] config.Routes.MapHttpRoute( na ...

  5. unity客户端基本框架(转载)

    框架概述: 基础系统的框架搭建,其中包括: UI框架(NGUI + MVC) 消息管理(Advanced CSharp Messenger) 网络层框架(Socket + Protobuf ) 表格数 ...

  6. python抽象篇:面向对象

    1.面向对象概述 面向过程编程:根据操作数据的函数或语句块来设计程序的. 函数式编程:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象编程:数据和功能结合起来,用称为对象的东西包 ...

  7. open-falcon Agent配置文件修改hostname后,还是有其他名称的endpoint

    问题 open-falcon Agent在配置文件修改hostname后,log日志中还是发现其他名称的endpoint. 原因 Graph, Gateway组件会引用goperfcounter(gi ...

  8. Leetcode题解(十八)

    51.N-Queens ---------------------------------------------------------------------------------分割线---- ...

  9. Windows环境下多线程编程原理与应用读书笔记(5)————互斥及其应用

    <一>互斥的同步机制 思想:当一个线程获得互斥量了后,其他所有要获取同一个互斥量的线程都处于阻塞状态,直到第一个线程释放互斥量为止. 设想几个线程竞争同一个互斥量,其中一个线程获得了互斥量 ...

  10. Android 开发笔记___DateUtil——Time

    package com.example.alimjan.hello_world; /** * Created by alimjan on 6/30/2017. */ import java.text. ...