您的位置:首页 > 健康 > 养生 > 西安网站seo诊断_北京十大科技公司_seo分析师招聘_网址链接生成器

西安网站seo诊断_北京十大科技公司_seo分析师招聘_网址链接生成器

2024/12/26 23:18:07 来源:https://blog.csdn.net/2401_86551514/article/details/142418134  浏览:    关键词:西安网站seo诊断_北京十大科技公司_seo分析师招聘_网址链接生成器
西安网站seo诊断_北京十大科技公司_seo分析师招聘_网址链接生成器

目录

一、求1+2+3+...+n

二、计算日期到天数的转换

三、日期差值

四、打印日期


一、求1+2+3+...+n

     这里先把题目链接放在这里求1+2+3.....+n

描述:

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)

      写一段代码求1+2+3+...+n很容易,但是这道题给了很多限制,我们可以创建一个类,给这个类的构造函数加一个累加的功能,要加到几,就调用几次构造函数。

class Solution {class sum{public:sum(){num+=i;i++;}};static int i;static int num;
public:int Sum_Solution(int n) {sum sun[n];return num;}
};
int Solution::i=1;
int Solution::num=0;

     在类中写一个累加的构造函数,创建一个含有n个元素的数组,给的n为几,就会调用几次构造函数,通过静态变量记录,这样就能得出累加的结果了。

二、计算日期到天数的转换

    题目链接计算日期到天数的转换

描述:

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

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

输入描述:

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

输出描述:

输出是这一年的第几天

    博主在这道题的思路是通过从这一年的1月1日加到给定的日期,记录下天数。

#include <iostream>
using namespace std;
int main() {int year,month,day;int date[13]={-1,31,28,31,30,31,30,31,31,30,31,30,31};cin>>year>>month>>day;int sum=0;for(int i=1;i<month;i++)sum+=date[i];if(month>2 &&((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)))sum=sum+1+day;elsesum+=day;cout<<sum<<endl;return 0;
}

     创建一个模拟每月天数的数组,通过累加的天数得到该日期是这一年的哪一天,注意平闰年的判断条件以及给的日期是否需要判断平闰年。

三、日期差值

    题目链接日期差值

描述

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

输入描述:

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

输出描述:

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

示例1

输入:

20110412
20110422
输出:11

    这道题博主用的方法比较简单粗暴,算出两个日期的从0年0月0日到日期的天数,然后相减得出结果。

#include <iostream>
using namespace std;
int date[13]={-1,31,28,31,30,31,30,31,31,30,31,30,31};
int getday(int y,int m,int d)
{int yday=y*365;int mday=0;for(int i=1;i<m;i++)mday+=date[i];if(m>2&& ((y%4 == 0 && y%100 != 0) || y%400==0))mday+=1;return yday+mday+d;
}
int main() {int y1,m1,d1;scanf("%4d%2d%2d",&y1,&m1,&d1);int i=getday(y1,m1,d1);int y2,m2,d2;scanf("%4d%2d%2d",&y2,&m2,&d2);int j=getday(y2,m2,d2);cout<<abs(j-i)+1<<endl;
}

     创建一个计算从0年0月0日到所给日期的天数,让两者相减就可以了,这里要注意一下,因为系统输入的年月日是黏在一起的(最开始代码一直没过就是没注意到这个),用cin就不行了,这里就可以用scanf。

四、打印日期

    题目链接打印日期

描述

给出年分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;
int monthday[13] = { -1,31,28,31,30,31,30,31,31,30,31,30,31 };
int getmonthday(int year, int month)
{if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))){return 29;}elsereturn monthday[month];
}
int main() {int y,day;while (cin >> y >> day) {int d=0;int m=1;d+=day;while(d>getmonthday(y,m)){d-= getmonthday(y,m);m++;if(m==13){y++;m=1;}}printf("%04d-%02d-%02d",y,m,d);printf("\n");}
}

     创建一个能够计算该月份天数的函数,和上一篇日期类的实现中的+=的运算符重载是一样的,代码比较简单看一下就明白了,打印的格式有要求,用cout不行就用的printf(有上一题的经验特别注意了一下输入输出的格式) 。


    本篇关于类和对象的几道OJ题就到这里了,感兴趣的的可以自己去写一下,每道题都给了链接,自己写了才更有感觉。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com