pta习题:退休日期推算

Posted simon5ei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pta习题:退休日期推算相关的知识,希望对你有一定的参考价值。

6-3 退休日期推算 (10分)
 

关于日期的结构定义如下: struct DateG{ int yy,mm,dd;};

编写两个函数,一个计算自公元1年1月1日到指定的日期共经历了多少天。另一个是前一个函数的逆函数:由自公元1年1月1日历经指定的天数后的日期(返回年月日构成的日期)。

函数接口定义:

DateG days2Date(int x);{//from:{1,1,1} + 100-->{1,4,11}
int Days(DateG x);// {2,,4,11}    return 465   from{1,1,1} 
 

裁判测试程序样例:

#include <iostream>
using namespace std;
struct DateG{
	int yy,mm,dd;
};
char leapYear(int year);//闰年否
struct DateG _DateG(char *st);{//"1919-9-9"-->{1919,9,9}
struct DateG Add(struct DateG x,int y);//{1919,9,9}+50-->{1919,10,29}
char* Date2string(struct DateG x);//{1919,9,9}-->"1919-09-09"
 //以上为测试程序提供的测试用函数,略去不表,
//以下两函数是必须自己完成的函数 
struct DateG days2Date(int x);{//from:{1,1,1} + 100-->{1,4,11}
int Days(struct DateG x);// {2,,4,11}    return 465   from{1,1,1} 

int main(){
	char st[12];scanf("%s",st);
	struct DateG d1=_DateG(st),
	d2=Add(d1,60*365);
	printf("%s
",Date2string(d2));	
	d2=Add(d2,-1000);
	printf("%s
",Date2string(d2));
	d2=_DateG("2020-1-23");
	printf("%.2f
",(Days(d2)-Days(d1))/365.0);
	return 0;
}
/* 请在这里填写答案 */

输入样例:

2001-1-1

输出样例:

[2060-12-17]
[2058-03-23]
19.07

 

帮其他专业的同学写网课作业,见到这道有点烦人的题目,一看网上没有现成的答案,那就自己写一份先码这把,没啥特别的技巧,典型的模拟,注意细节就好。

 

  1. struct DateG days2Date(int x){    
  2.         struct DateG Year;    
  3.         Year.yy=1;    
  4.         Year.mm=1;    
  5.         Year.dd=1;    
  6.         while(x--){    
  7.             Year.dd++;    
  8.             if((Year.yy%4==0&&Year.yy%100!=0)||Year.yy%400==0){//是闰年     
  9.                 if((Year.mm==1||Year.mm==3||Year.mm==5||Year.mm==7||Year.mm==8||Year.mm==10||Year.mm==12)&&Year.dd>31)    
  10.                 {    
  11.                     Year.dd=1;    
  12.                     Year.mm++;    
  13.                     if(Year.mm>12){    
  14.                         Year.mm=1;    
  15.                         Year.yy++;    
  16.                     }    
  17.                 }    
  18.                 else if(Year.mm==2&&Year.dd>29){//闰年二月单独讨论     
  19.                     Year.dd=1;    
  20.                     Year.mm++;    
  21.                 }    
  22.                 else if((Year.mm==4||Year.mm==6||Year.mm==9||Year.mm==11)&&Year.dd>30){    
  23.                     Year.dd=1;    
  24.                     Year.mm++;    
  25.                 }    
  26.             }    
  27.             else{//非闰年     
  28.                 if((Year.mm==1||Year.mm==3||Year.mm==5||Year.mm==7||Year.mm==8||Year.mm==10||Year.mm==12)&&Year.dd>31)    
  29.                 {    
  30.                     Year.dd=1;    
  31.                     Year.mm++;    
  32.                     if(Year.mm>12){    
  33.                         Year.mm=1;    
  34.                         Year.yy++;    
  35.                     }    
  36.                 }    
  37.                 else if(Year.mm==2&&Year.dd>28){//二月单独讨论     
  38.                     Year.dd=1;    
  39.                     Year.mm++;    
  40.                 }    
  41.                 else if((Year.mm==2||Year.mm==4||Year.mm==6||Year.mm==9||Year.mm==11)&&Year.dd>30){    
  42.                     Year.dd=1;    
  43.                     Year.mm++;    
  44.                 }    
  45.             }    
  46.         }    
  47.         return Year;    
  48.     }    
  49.         
  50.     int Days(struct DateG x){    
  51.         int res=0,flag=1;    
  52.         while(flag==1){    
  53.             res++;    
  54.             x.dd--;    
  55.             if((x.yy%4==0&&x.yy%100!=0)||x.yy%400==0){//闰年    
  56.                 if((x.mm==1||x.mm==3||x.mm==5||x.mm==7||x.mm==8||x.mm==10||x.mm==12)&&x.dd==0){    
  57.                     if(x.mm==8||x.mm==1)    
  58.                         x.dd=31;    
  59.                     else if(x.mm==3)    
  60.                         x.dd=29;    
  61.                     else    
  62.                         x.dd=30;    
  63.                     x.mm--;    
  64.                     if(x.mm==0){    
  65.                         x.mm=12;    
  66.                         x.yy--;    
  67.                     }    
  68.                 }    
  69.                 else if((x.mm==2||x.mm==4||x.mm==6||x.mm==9||x.mm==11)&&x.dd==0){    
  70.                     x.dd=31;    
  71.                     x.mm--;    
  72.                 }    
  73.             }    
  74.             else{//非闰年    
  75.                 if((x.mm==1||x.mm==3||x.mm==5||x.mm==7||x.mm==8||x.mm==10||x.mm==12)&&x.dd==0){    
  76.                     if(x.mm==8||x.mm==1)    
  77.                         x.dd=31;    
  78.                     else if(x.mm==3)    
  79.                         x.dd=28;    
  80.                     else    
  81.                         x.dd=30;    
  82.                     x.mm--;    
  83.                     if(x.mm==0){    
  84.                         x.mm=12;    
  85.                         x.yy--;    
  86.                     }    
  87.                 }    
  88.                 else if((x.mm==2||x.mm==4||x.mm==6||x.mm==9||x.mm==11)&&x.dd==0){    
  89.                     x.dd=31;    
  90.                     x.mm--;    
  91.                 }    
  92.             }    
  93.                 
  94.             if(x.yy==1&&x.mm==1&&x.dd==1)    
  95.                 flag=0;    
  96.         }    
  97.         return res;    
  98.     }  
 

以上是关于pta习题:退休日期推算的主要内容,如果未能解决你的问题,请参考以下文章

PTA乙级 (1049 数列的片段和 (20分))

PTA的Python练习题

[PTA]习题11-8 单链表结点删除

[PTA]习题11-2 查找星期

PTA的Python练习题(二十)

[PTA]习题6-1 分类统计字符个数