【乱搞】【AOJ-59】09年3月选拔赛第4题
2013-12-09 17:50
253 查看
Description
最近图书馆的工作人员在检查馆藏书目的时候发现,有很多书籍久久没有被借书人归还。于是工作人员决定给这些不负责任的借书人发信件通知他们来图书馆归还书籍并缴纳罚款(会有用吗?)。现在请你为图书馆工作人员编写程序,以计算每个不归还书籍的借书者借书天数。
Input
第一行输入为三个正整数y m d,分别代表现在的年、月、日;
第二行输入为一个正整数n,代表下面有多少个借书者信息;
下面有n行输入,每行有三个正整数yy mm dd, 代表一个借书者借书的日期(年、月、日)。
年份数据的范围为[1, 9999]
Output
输出共有n行,每行输出一个正整数,代表对应的借书者借书天数。
Sample Input
Sample Output
思路:
1、如果是同一年,通过算出当前日期是此年的第几天,然后相减得出
2、如果不是同一年,则中间相隔y1-y2-1个完整的年,通过循环判断是否为闰年,如果是则+366天,否则+365天
结束循环后判断其实和结束年是否为闰年,然后加上366||365-起始年的第几天,再加上末尾年的第几天
PS:神经质般的用了__int64...
参考代码:
最近图书馆的工作人员在检查馆藏书目的时候发现,有很多书籍久久没有被借书人归还。于是工作人员决定给这些不负责任的借书人发信件通知他们来图书馆归还书籍并缴纳罚款(会有用吗?)。现在请你为图书馆工作人员编写程序,以计算每个不归还书籍的借书者借书天数。
Input
第一行输入为三个正整数y m d,分别代表现在的年、月、日;
第二行输入为一个正整数n,代表下面有多少个借书者信息;
下面有n行输入,每行有三个正整数yy mm dd, 代表一个借书者借书的日期(年、月、日)。
年份数据的范围为[1, 9999]
Output
输出共有n行,每行输出一个正整数,代表对应的借书者借书天数。
Sample Input
1 1 1 3 1 1 1 1 1 31 1 2 28
Sample Output
0 30 58
思路:
1、如果是同一年,通过算出当前日期是此年的第几天,然后相减得出
2、如果不是同一年,则中间相隔y1-y2-1个完整的年,通过循环判断是否为闰年,如果是则+366天,否则+365天
结束循环后判断其实和结束年是否为闰年,然后加上366||365-起始年的第几天,再加上末尾年的第几天
PS:神经质般的用了__int64...
参考代码:
#include <stdio.h> #include <stdlib.h> __int64 wtd(int year,int month,int day);//求出是某年的第几天 int is_run(int year);//判断是否为闰年 int main() { int y,m,d; int yy,mm,dd; int n,i; __int64 day=0; scanf("%d%d%d",&y,&m,&d); scanf("%d",&n); while(n--) { scanf("%d%d%d",&yy,&mm,&dd); if(y==yy) { day=wtd(yy,mm,dd)-wtd(y,m,d); } else { for(i=1;i<yy-y;i++) { if(is_run(y+i)) day+=366; else day+=365; } if(is_run(y)) day+=366-wtd(y,m,d); else day+=365-wtd(y,m,d); day+=wtd(yy,mm,dd); } printf("%I64d\n",day); day=0; } return 0; } __int64 wtd(int year,int month,int day) { int i; __int64 sum=0; if(is_run(year)) { for(i=1;i<month;i++) { if(i==2) sum+=29; else if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) sum+=31; else sum+=30; } sum+=day; } else { for(i=1;i<month;i++) { if(i==2) sum+=28; else if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) sum+=31; else sum+=30; } sum+=day; } return sum; } int is_run(int year) { if((year%4==0&&year%100!=0)||year%400==0) return 1; else return 0; }
相关文章推荐
- cocos2d-x触摸分发器原理
- Android activity四种加载方式
- 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- jquery垂直公告滚动实现代码
- C#多线程学习(四) 多线程的自动管理(线程池)
- VM启动报错:Failed to lock the file
- cocos2d-x触摸分发器原理
- 访问父frame里面的id
- android 内核剖析
- VM 启动时报错:Failed to lock the file
- 一个比较不错 文件上传判断
- Android 调用父类方法,进行子界面刷新
- android ListView详解
- 几种主流数据库比较之我们该学习哪种数据库
- linux系统下的磁盘调度策略
- 时间函数。
- ZigBee协议分析仪Smart PacketSniffer
- C指针原理(1)
- OpenCV Python教程(1、图像的载入、显示和保存)
- 探讨Ajax中同步与异步之间的区别