杭电acm----1201 18岁生日
2016-07-26 13:45
483 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1201
解题思路:
首先判断有没有18岁生日:
*****当你输入的月份是2,日期为29,代表你出生的就是闰年,你只要判断18年后是不是闰年就好了,若不是闰年,代表没有18岁生日,反之,则有。
若有18岁生日,算从出生到18岁生日所占的天数。
*****从出生那年1月1日开始算,到18岁那年的1月1日所占的天数,再加上你18岁那年从1月1日到你生日的天数,再减去你出生那年从1月1日到你出生所占的天数
解题思路:
首先判断有没有18岁生日:
*****当你输入的月份是2,日期为29,代表你出生的就是闰年,你只要判断18年后是不是闰年就好了,若不是闰年,代表没有18岁生日,反之,则有。
若有18岁生日,算从出生到18岁生日所占的天数。
*****从出生那年1月1日开始算,到18岁那年的1月1日所占的天数,再加上你18岁那年从1月1日到你生日的天数,再减去你出生那年从1月1日到你出生所占的天数
#include <iostream> using namespace std; int type(int y) { if (y%4 != 0 || (y%100==0&&y%400 !=0)) return 0; else return 1; } int main() { int n,y,m,d,i,years,month,j,s,k,x; int days[2][13] = {0,31,28,31,30,31,30,31,31,30,31,30,31, 0,31,29,31,30,31,30,31,31,30,31,30,31}; int year[2]={365,366}; cin>>n; while(n--) { x=years=month=0; scanf("%d-%d-%d",&y,&m,&d); k=y+18; if(type(k)==0&&m==2&&d==29) { cout<<"-1"<<endl; } else { for(i=y;i<k;i++) { years+=year[type(i)]; } for(j=1;j<m;j++) { if(type(y)==0) x+=days[0][j]; else x+=days[1][j]; if(type(k)==0) month+=days[0][j]; else month+=days[1][j]; } s=years+month-x; cout<<s<<endl; } } return 0; }
相关文章推荐
- centos6.5安装python2.7.9
- 深入理解javascript作用域系列第四篇——块作用域
- Graphics平移缩放旋转
- Memcache如何保存数据过期时间为31天?
- SNMP网络管理协议,企业对应的OID段
- 华为路由器配置OSPF实例
- 【数据结构】单链表—寻找两个相交链表中第一个公共结点 — 蛮力法 / 栈 / 指针先走
- jQuery外链新窗口打开
- Tomcat端口被占用Address already in use: JVM_Bind <null>:8080
- 实现上传解析Excel表格
- Sql优化方法
- 使用iftop监控网卡实时流量
- 苹果手机点击延迟问题
- ie7span标签float换行悬浮
- Xcode插件整理
- Spring IOC注入源码分析
- 直接插入排序----java实现
- netapp 8.3 cluster mode 安装过程。
- 定制ubuntu live cd
- POJ-1128 Frame Stacking