当前位置: 首页 > news >正文

Day05 日期类OJ题目

计算日期到天数转换_牛客题霸_牛客网根据输入的日期,计算是这一年的第几天。 保证年份为4位数且日期合法。 进阶:时。题目来自【牛客题霸】icon-default.png?t=O83Ahttps://www.nowcoder.com/share/jump/4938575031726974727572 

根据输入的日期,计算是这一年的第几天。

保证年份为4位数且日期合法。

进阶:时间复杂度:O(n) O(n) ,空间复杂度:O(1) O(1) 

输入描述:

输入一行,每行空格分割,分别是年,月,日

输出描述:

输出是这一年的第几天

#include <iostream>
using namespace std;bool IsLeapYear(int year) // 闰年判断
{if(((year%4 == 0 && 0 != year%100) || (0 == year%400)))return true;return false;
}int GetDayofYear(int year, int month, int day)
{int days = 0;   // 用于返回结果int DayOfMonth[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };for(int i = 1; i < month; i++) // 将当前月份之前所有day加上{days += DayOfMonth[i];if(i == 2 && IsLeapYear(year))  // 若是闰年 加一天days+=1;}days += day;return days;
}int main() 
{int year, month, day;while(cin>>year>>month>>day){cout << GetDayofYear(year, month, day) <<endl;}return 0;   
}

日期差值_牛客题霸_牛客网有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。题目来自【牛客题霸】icon-default.png?t=O83Ahttps://www.nowcoder.com/share/jump/4938575031726976288481

描述

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天

输入描述:

有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

输出描述:

每组数据输出一行,即日期差值

示例1

输入:

20110412
20110422

输出:

11
#include <iostream>
using namespace std;class Date
{public:bool Isleap(int year){if((year%4==0 && year%100!=0) || year%400==0)return true;elsereturn false;}int Getday(int year, int month){int arr[13] = {0, 31, 28, 31,30,31,30,31,31,30,31,30,31};int day = arr[month];if(Isleap(year) && month == 2)day += 1;return day;}Date(int year = 2022, int month = 12, int day = 8): _year(year), _month(month), _day(day){if(!((year>0) && (month>0 && month<=12) && (day>0 && day<=Getday(year, month)))){cout<<"输入的日期不正确,即将将日期重新初始化为默认日期"<<endl;_year = 2022;_month = 12;_day = 8;}}Date(const Date& d){_year = d._year;_month = d._month;_day = d._day;}// Date operator+(int day)// {//     Date temp(*this);//     temp._day += day;//     int GetDay = 0;//     while(temp._day > (GetDay = Getday(temp._year, temp._month)))//     {//         temp._day -= GetDay;//         temp._month += 1;//         if(temp._month == 13)//         {//             temp._month = 1;//             temp._year += 1;//         }//     }//     return temp;// }Date operator+(int day){// 因为 + 不改变左右参数的值,所以可以使用一个临时变量来存储并返回所得的结果。Date temp(*this);temp._day += day;// 当这个天数不合法时循环继续int Daysofmonth = 0;while (temp._day >  (Daysofmonth = Getday(temp._year, temp._month))){// _day 减去本月的天数temp._day -= Daysofmonth;// _month 后移一月temp._month += 1;// 对月数格式检测是否合法,如果到13月了 直接转入1月if (temp._month == 13){temp._month = 1;temp._year += 1;}}return temp;}bool operator>(Date d){if(_year>d._year || (_year==d._year && _month>d._month) || (_year==d._year && _month==d._month && _day>d._day))return true;elsereturn false;}bool operator==(Date d){return (_year==d._year && _month==d._month && _day==d._day);}bool operator!=(Date d){return !(*this==d);}// int operator-(Date d)// {//     Date maxdate(*this);//     Date mindate(d);//     if(mindate>maxdate)//     {//         maxdate = d;//         mindate = *this;//     }//     int count = 0;//     while(maxdate != mindate)//     {//         mindate = mindate + 1;//         count++;//     }//     return count;// }int operator-(const Date& d){Date maxdate(*this);Date mindate(d);if (mindate > maxdate){maxdate = d;mindate = *this;}int count = 0;while (mindate != maxdate){count++;mindate = mindate + 1;}return count;}private:int _year;int _month;int _day;
};int main() {// char s1[8], s2[8];// cin>>s1>>s2;// char s1_year[4], s2_year[4];// for(int i = 0; i < 4; ++i)// {//     s1_year[i] = s1[i];//     s2_year[i] = s2[i];// }// char s1_month[2], s2_month[2];// for(int i = 4; i < 6; ++i)// {//     s1_month[i] = s1[i];//     s2_month[i] = s2[i];// }// char s1_day[2], s2_day[2];// for(int i = 4; i < 6; ++i)// {//     s1_day[i] = s1[i];//     s2_day[i] = s2[i];// }// Date d1(atoi(s1_year), atoi(s1_month), atoi(s1_day));// Date d2(atoi(s2_year), atoi(s2_month), atoi(s2_day));int time1,y1,m1,d1;int time2,y2,m2,d2;scanf("%d%d",&time1,&time2);if(time1 > time2){int temp = time1;time1 = time2;time2 = temp;}y1 = time1/10000;m1 = time1%10000/100;d1 = time1%100;y2 = time2/10000;m2 = time2%10000/100;d2 = time2%100;Date D1(y1, m1, d1);Date D2(y2, m2, d2);int day = D1 - D2;cout<<day+1<<endl;}
// 64 位输出请用 printf("%lld")

 打印日期_牛客题霸_牛客网给出年分m和一年中的第n天,算出第n天是几月几号。。题目来自【牛客题霸】icon-default.png?t=O83Ahttps://www.nowcoder.com/share/jump/4938575031726985648236

描述

给出年分m和一年中的第n天,算出第n天是几月几号。

输入描述:

输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。

输出描述:

可能有多组测试数据,对于每组数据, 按 yyyy-mm-dd的格式将输入中对应的日期打印出来。

示例1

输入:

2000 3
2000 31
2000 40
2000 60
2000 61
2001 60

输出:

2000-01-03
2000-01-31
2000-02-09
2000-02-29
2000-03-01
2001-03-01
#include <iostream>
using namespace std;
#include <stdio.h>bool Isleap(int year) 判断闰年{if((year%4==0 && year%100!=0) || year%400==0)return true;elsereturn false;}int getday(int year, int month)    获取该年该月天数
{int arr[13] = {0, 31, 28, 31,30,31,30,31,31,30,31,30,31};int day = arr[month];if(month == 2 && Isleap(year))return day+1;elsereturn day;
}int main() {int _year, _day;while (scanf("%d %d", &_year, &_day) != EOF) { int month = 1;int day = getday(_year, month); 用给出的_day每次减去当月while(_day > day)               若_day小于day则就在该月{                            否则就是在后面月份,更新_day 和 month_day -= day;month++;day = getday(_year, month);}printf("%d-%02d-%02d\n", _year, month, _day);}return 0;
}
// 64 位输出请用 printf("%lld")

日期累加_牛客题霸_牛客网设计一个程序能计算一个日期加上若干天后是什么日期。。题目来自【牛客题霸】icon-default.png?t=O83Ahttps://www.nowcoder.com/share/jump/4938575031726985933191

描述

设计一个程序能计算一个日期加上若干天后是什么日期。

输入描述:

输入第一行表示样例个数m,接下来m行每行四个整数分别表示年月日和累加的天数。

输出描述:

输出m行,每行按yyyy-mm-dd的个数输出。

示例1

输入:

1
2008 2 3 100

输出:

2008-05-13
#include <iostream>
using namespace std;
#include<stdio.h>bool Isleapyear(int year)
{if((year%4==0 && year%100!=0) || year%400==0)return true;return false;
}int GetDay(int year, int month)
{int arr[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};int day = arr[month];if(Isleapyear(year) && month==2)return day+1;elsereturn day;
}void Date(int _year, int _month, int _day, int day)
{_day += day;while(_day > GetDay(_year, _month)){_day-=GetDay(_year, _month);_month+=1;if(_month==13){_year+=1;_month=1;}}printf("%d-%02d-%02d\n", _year,_month,_day);
}int main() {int n,_year,_month,_day,day;cin>>n;for(int i = 0; i < n; ++i){cin>>_year>>_month>>_day>>day;Date(_year,_month,_day,day);}
}
// 64 位输出请用 printf("%lld")


http://www.mrgr.cn/news/33444.html

相关文章:

  • 使用Go语言的互斥锁(Mutex)解决并发问题
  • Linux-gcc/g++
  • HTB-GreenHorn 靶机笔记
  • 校园美食发现:Spring Boot技术的美食社交平台
  • Zotero(7.0.5)+123云盘同步空间+Z-library=无限存储文献pdf/epub电子书等资料
  • 【Linux】【Hadoop】大数据基础实验一
  • 华为HarmonyOS灵活高效的消息推送服务(Push Kit) - 4 获取Push Token
  • Ubuntu24.04 安装ssh开启22端口及允许root用户远程登录
  • 切换笔记本键盘的启用与禁用状态
  • CPU和GPU运行的差别在哪里?
  • 文件 上传
  • 水果识别系统Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
  • [云服务器14] 搭建属于你自己的Git服务器
  • JVM OOM(OutOfMemoryError)问题排查与解决
  • 【JavaEE初阶】文件IO(上)
  • 【模板进阶】类模板中可变参的特殊继承方式
  • Java的格式化输出
  • 计算机网络笔记001
  • VScode配置连接远程服务器configure ssh Hosts
  • 【计算机网络 - 基础问题】每日 3 题(十八)