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. gnome 3 美化

    首先,去http://gnome-look.org/找到需要的主题,然后手动安装或者用下载到的主题包里的脚本安装 手动安装对应路径如下: 鼠标,图标主题解压放置:~/.icons或/usr/share ...

  2. Python 3 使用venv创建虚拟环境

    Python 3.3以上使用venv来代替了原来Python2使用的virtualenv创建虚拟环境. 虚拟环境的作用是使得不同项目的Python包之间不会相互干扰,避免了由此产生的各种问题. 现在演 ...

  3. Arduino.最小系统面包板搭建

    最早试过用万用板做过最小系统,主要用来烧录芯片 后来为了方便,用面包板也搭了一个最小系统, 但不采用杜邦线,因为飞来飞去的线太乱了 因此就有了这个简洁的版本,先上个成品图 用个烧录器就可以很方便的烧写 ...

  4. LeetCode 119. Pascal's Triangle II (杨辉三角之二)

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...

  5. 从入门到放弃之IO

    浅说IO 学到现在利用过的特殊符号不少组合起来很多都有让人眼前一亮的用法,在这里先聊聊I/O的一些相关知识. 本文开始之前先介绍一下需要知道的一些小知识和需要注意的地方. 在linux中也是有优先级的 ...

  6. 【hihoCoder】#1039 : 字符消除 by C solution

    #1039 : 字符消除 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi最近在玩一个字符消除游戏.给定一个只包含大写字母"ABC"的字符串s,消 ...

  7. zookeeper启动后的注意事项

    在各节点中运行zkServer.sh start后 1.首先看进程是否存在 QuorumPeerMain. 2.查看zookeeper的运行状态 zkServer.sh status,会出现一个lea ...

  8. Host文件简介

    摘抄自:http://www.cnblogs.com/zgx/archive/2009/03/10/1408017.html.百度百科:hosts文件 很奇怪有很多人不知道Hosts是什么东西.在网络 ...

  9. 暑假练习赛 006 E Vanya and Label(数学)

    Vanya and LabelCrawling in process... Crawling failed Time Limit:1000MS     Memory Limit:262144KB    ...

  10. 一款超好用轻量级JS框架——Zepto.js(上)

       前  言 絮叨絮叨 之前我们介绍过JQuery怎么自定义一个插件,但没有详细介绍过JQuery,那么今天呢....我们还是不说JQuery,哈哈哈哈 但是今天我们介绍一款和JQuery超级像的一 ...