ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

《算法笔记》3.4小节——入门模拟->日期处理

2022-02-04 23:59:30  阅读:180  来源: 互联网

标签:入门 int 31 30 样例 小节 n% 日期 3.4


《算法笔记》3.4小节——入门模拟->日期处理

A 日期差值

题目描述

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

输入

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

输出

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

样例输入

20130101
20130105

样例输出

5

提交代码

#include<stdio.h>
int isprime(int n){
if((n%4==0&&n%100!=0)||n%400==0)
    return 1;
else
     return 0;
}
int main(){
  int num[13][2]={{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},
  {30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};
  int a,b,t;
int y1,m1,d1,y2,m2,d2;
  while(scanf("%d %d",&a,&b)!=EOF){
    if(a>b){
    t=a;
    a=b;
    b=t;
  }
  y1=a/10000;m1=a%10000/100;d1=a%100;
  y2=b/10000;m2=b%10000/100;d2=b%100;
  int count=0;
  while(y1!=y2||m1!=m2||d1!=d2){
    d1++;
    if(d1==num[m1][isprime(y1)]+1){
       d1=1;
       m1++;
       }
    if(m1==13){
    m1=1;
    y1++;
    }
    count++;
 }
 printf("%d\n",count+1);
  }
  return 0;
}

B Day of Week

C 打印日期

题目描述

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

输入

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

输出

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

样例输入

2013 60
2012 300
2011 350
2000 211

样例输出

2013-03-01
2012-10-26
2011-12-16
2000-07-29

代码提交

#include <stdio.h>
#include <string.h>

int isprime(int n){
if((n%4==0&&n%100!=0)||n%400==0)
    return 1;
else
     return 0;
}
int main(){
	int month[13][2]={{0,0}, {31,31}, {28,29}, {31,31}, {30,30}, {31,31}, {30,30}, {31,31}, {31,31}, {30,30}, {31,31}, {30,30}, {31,31}};
	int y, m=1, d=0, n;
	while(scanf("%d%d", &y, &n)!=EOF){
		while(n>0){
			d++;
			if(d==month[m][isprime(y)]+1){
				m++;
				d=1;
			}
			if(m==13){
				y++;
				m=1;
			}
			n--;
		}
		printf("%04d-%02d-%02d\n", y, m, d);
		m=1, d=0;
	}
	return 0;
}

D 日期类

题目描述

编写一个日期类,要求按xxxx-xx-xx 的格式输出日期,实现加一天的操作。

输入

输入第一行表示测试用例的个数m,接下来m行每行有3个用空格隔开的整数,分别表示年月日。测试数据不会有闰年。

输出

输出m行。按xxxx-xx-xx的格式输出,表示输入日期的后一天的日期。

样例输入

2
1999 10 20
2001 1 31

样例输出

1999-10-21
2001-02-01

提示

注意个位数日期前面要有0。

代码提交

#include <stdio.h>
#include <string.h>

int isprime(int n){
if((n%4==0&&n%100!=0)||n%400==0)
    return 1;
else
     return 0;
}

int main()
{
	int num[13][2]={{0,0}, {31,31}, {28,29}, {31,31}, {30,30}, {31,31}, {30,30}, {31,31}, {31,31}, {30,30}, {31,31}, {30,30}, {31,31}};
	int year,month,day,days,m;
	while(scanf("%d",&m)!=EOF)
	{
		for(int i=0;i<m;i++)
	   {
		   scanf("%d%d%d", &year,&month,&day);

			if(day==num[month][isprime(year)]+1){
				month++;
				day=1;
			}
			if(month==13){
				year++;
				month=1;
			}
			day=day+1;
          printf("%04d-%02d-%02d\n", year,month,day);
       }
	}
	return 0;
}


E 日期累加

题目描述

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

输入

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

输出

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

样例输入

1
2008 2 3 100

样例输出

2008-05-13

代码提交

#include <stdio.h>
#include <string.h>

int isprime(int n){
if((n%4==0&&n%100!=0)||n%400==0)
    return 1;
else
     return 0;
}


int main()
{
    int num[13][2]={{0,0}, {31,31}, {28,29}, {31,31}, {30,30}, {31,31}, {30,30}, {31,31}, {31,31}, {30,30}, {31,31}, {30,30}, {31,31}};
    int day,year,month,cnt;
    int n;
    scanf("%d",&n);

    for(int j = 0;j < n;j++){
        scanf("%d %d %d %d",&year,&month,&day,&cnt);
        for(int i = cnt;i > 0;i--){
            day++;
            if(day==num[month][isprime(year)]+1){
                month++;
                day = 1;
            }
            if(month == 13){
                year++;
                month = 1;
            }
        }
        printf("%04d-%02d-%02d\n",year,month,day);
    }
    return 0;
}

标签:入门,int,31,30,样例,小节,n%,日期,3.4
来源: https://blog.csdn.net/m0_46436086/article/details/122786790

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有