http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2191
题意:给你两个年月日,让你算出其中经历了多少天输出 。
思路 :这个题是一个大大的模拟,可惜比赛的时候我都卡了一个半小时,又回去改了好久脑子都废了。今早上才在二师兄的点播之下才知道,原来年月日不一定上边的小,所以要判断一下,我就是因为这个WA了十几遍。。。。T_T。。。。。。。
#include<stdio.h>
#include<cmath>
#include<iostream> using namespace std ; struct node
{
int year ;
int month ;
int date ;
} ch,sh; int is_leap(int n)
{
if(n% == ||(n%==&&n%!=))
return ;
return ;
} int main()
{
int sum = ;
int mon[] = {,,,,,,,,,,,,} ;
scanf("%d:%d:%d",&ch.year,&ch.month,&ch.date) ;
scanf("%d:%d:%d",&sh.year,&sh.month,&sh.date) ;
if(ch.year > sh.year)
{
swap(ch.year,sh.year) ;
swap(ch.month,sh.month) ;
swap(ch.date,sh.date) ;
} if(ch.year == sh.year)
{
if(ch.month > sh.month)
{
swap(ch.year,sh.year) ;
swap(ch.month,sh.month) ;
swap(ch.date,sh.date) ;
}
if(ch.month == sh.month)
sum += fabs(sh.date-ch.date) ;
else
{
for(int i = ch.month+ ; i < sh.month ; i++)
sum += mon[i] ;
sum += (mon[ch.month]+-ch.date) ;
sum += sh.date ;
sum -= ;
if(is_leap(ch.year)&&ch.month <= &&sh.month > )
sum++ ;
}
}
else
{
for(int i = ch.year+ ; i <= sh.year- ; i++)
{
sum+= ;
if(is_leap(i))
sum++ ;
}
if(ch.month != )
{
for(int i = ch.month+ ; i <= ; i++)
sum += mon[i] ;
if(ch.month <= &&is_leap(ch.year))
sum ++ ;
}
sum += (mon[ch.month]+-ch.date) ;
if(sh.month!= )
{
for(int i = ; i <= sh.month- ; i++)
sum+=mon[i] ;
if(sh.month > &&is_leap(sh.year))
sum++ ;
}
sum += sh.date- ;
}
printf("%d\n",sum) ;
return ;
}
当然还有一种做法,因为题目中是说年份是大于等于1900小于等于2038的,所以当你输入两个月份的时候,就以1900年01月01日为准,用两个年份分别算从1900年01月01日到他们的距离,再求差,当然了,因为上下两个年份不知道谁大谁小,所以要加绝对值,这种方法简单不易出错,代码量还小一半左右,想实现的可以试试哦
SDUT2191Calendar的更多相关文章
随机推荐
-
Material Design风格登录注册
本文实现了以下功能 完整的代码和样例托管在Github 当接口锁定时,防止后退按钮显示在登录Activity 上. 自定义 ProgressDialog来显示加载的状态. 符合材料设计规范. 悬浮标签 ...
-
斐波那契(Fibonacci)数列的七种实现方法
废话不多说,直接上代码 #include "stdio.h" #include "queue" #include "math.h" usin ...
-
泛型转Datatable
//自定义扩展方法 public static class ExtMethod { //泛型转为DataTable public static DataTable AsDataTable<T&g ...
-
WPF-MVC开发模式简要介绍
1, 建立WPF程序,并在程序中添加三个文件View,ViewMoudle,Moudle, 2,Moudle文件加中添加类,此文件夹中存放的类基本为数据类,主要是字段和属性 3 ViewMoudle文 ...
-
APP测试--功能测试
1.1 了解需求 这一点,不但是功能测试,是所有测试都需要的第1步.通过需求文档,与产品经理的沟通,与开发的沟通,用户的使用习惯等各方法,了解APP的需求. 1.2 编写测试用例 当然之前可能是测试计 ...
-
octave中的一些基本操作
1.矩阵的表示:v = [1 2 2] %表示1行3列的矩阵 v = [1; 2; 2] %表示3行1列的矩阵 v = [1 2; 2 3; 4 5] %3*2矩阵 size(v) % 求v的行与列 ...
-
常用js正则表达式大全
常用js正则表达式大全.一.校验数字的js正则表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和 ...
-
HDU - 1849 Rabbit and Grass 【Nim博弈】
Problem Description 大学时光是浪漫的,女生是浪漫的,圣诞更是浪漫的,但是Rabbit和Grass这两个大学女生在今年的圣诞节却表现得一点都不浪漫:不去逛商场,不去逛公园,不去和AC ...
-
2018.10.19 NOIP训练 游戏问题(分组背包)
传送门 分组背包经典问题. 令f[i][j]f[i][j]f[i][j]表示前iii组花费为jjj的最优值. g[i][j]g[i][j]g[i][j]表示前iii组,第iii组已经支付了平台费用的最 ...
-
关于Javascript判断变量是否为空
如何判断Javascript对象是否存在 原文网址:http://www.ruanyifeng.com/blog/2011/05/how_to_judge_the_existence_of_a_glo ...