类和对象(4)——补充内容+DateOJ题

news2024/12/28 5:12:16

Date类型的OJ

  • 一,static成员
    • 例题
  • 二,DateOJ题
    • 一,[计算日期到天数转换](https://www.nowcoder.com/practice/769d45d455fe40b385ba32f97e7bcded?tpId=37&&tqId=21296&rp=1&ru=/activity/oj&qru=/ta/huawei/question-ranking)
      • 1.1分析
      • 1.2代码
    • 二,[日期差值](https://www.nowcoder.com/practice/ccb7383c76fc48d2bbc27a2a6319631c?tpId=62&&tqId=29468&rp=1&ru=)
      • 2.1分析
      • 2.2代码
    • 三,[打印日期](https://www.nowcoder.com/practice/b1f7a77416194fd3abd63737cdfcf82b?tpId=69&&tqId=29669&rp=1&ru=/activity/oj&qru=/ta/hust-kaoyan/question-ranking)
      • 3.1分析
      • 3.2代码
    • 四,[日期累加](https://www.nowcoder.com/practice/eebb2983b7bf40408a1360efb33f9e5d?tpId=40&&tqId=31013&rp=1&ru=/activity/oj&qru=/ta/kaoyan/question-ranking)
      • 4.1分析
      • 4.2代码

一,static成员

声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。静态成员变量一定要在类外进行初始化。
特点:

  1. 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区
  2. 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明
  3. 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问
  4. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员
  5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制

例题

在这里插入图片描述

class Sum
{
public:
    Sum()
    {
        _ret+=_i;
        _i++;
    }
    static int GetSum()
    {
        return _ret;
    }
private:
    static int _i;
    static int _ret;
};
int Sum::_i=1;
int Sum::_ret=0;
class Solution {
public:
    int Sum_Solution(int n) {
        Sum sun[n];
        return Sum::GetSum();
    }
};

因为static定义的变量是所有成员共同拥有的,所以要计算n次,那么就调用n次的构造即可。

二,DateOJ题

一,计算日期到天数转换

在这里插入图片描述
在这里插入图片描述

1.1分析

从题目要求出发,我们先计算给出的月份距离一月的天数,然后再加上day。我们这里计算月份的天数可以用数组来计算。

1.2代码

#include <iostream>
using namespace std;

int main() {
    int year,month,day;
    cin>>year>>month>>day;
    int GetDay[13]={0,31,59,90,120,151,181,212,243,273,304,334,365};
    int n=GetDay[month-1]+day;
    if(month > 2 && ((year%4==0 && year%100!=0)||(year%400==0)))
    {
        n+=1;
    }
    cout<<n<<endl;
}

二,日期差值

在这里插入图片描述

2.1分析

我们有了上一题的代码,我们就可以先算出两个(month+day)的差值然后再计算year之间的差。

2.2代码

#include <iostream>
using namespace std;
int Getday(int year, int month,int day)
{
    int GetDay[13]={0,31,59,90,120,151,181,212,243,273,304,334,365};
    int n=GetDay[month-1]+day;
    if(month > 2 && ((year%4==0 && year%100!=0)||(year%400==0)))
    {
        n+=1;
    }
    return n;
}
int main() {
	int year1,month1,day1;
	int year2,month2,day2;
	int ret=0;
	while (scanf("%04d%02d%02d\n%04d%02d%02d", &year1, &month1, &day1, &year2, &month2, &day2) != EOF)
    {
        int num1=Getday(year1,month1,day1);
        int num2=Getday(year2,month2,day2);
        int ret=0;
        if(num1>num2)
        {
            ret=num1-num2;
        }
        else {
        ret=num2-num1;
        }
        int max=year1,min=year2;
        if(max<year2)
        {
            max=year2;
            min=year1;
        }
        while(min!=max)
        {
            if((min%4==0 && min%100!=0)||(min%400==0))
            {
                ret+=366;
            }
            else {
            ret+=365;
            }
            min++;
        }
        cout<<ret+1<<endl;
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

三,打印日期

在这里插入图片描述

3.1分析

第n天减去每个月份的天数,然后月份++

3.2代码

#include <iostream>
using namespace std;
int dayTab[2][13] = {
    {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
int IsLeapYear(int year) {           //是否为闰年
    if((year % 4 == 0 && year % 100 != 0 ) || (year % 400 == 0))
    {
        return 1;
    }
    else {
        return 0;
    }
}
int main() {
    int year, month, day, number;
    while (scanf("%d%d", &year, &number) != EOF) {
        month=0;
        int row =IsLeapYear(year);
        while(number>dayTab[row][month])
        {
            number-=dayTab[row][month];
            month++;
        }
        day=number;               
        printf("%04d-%02d-%02d\n",year,month,day);
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

四,日期累加

在这里插入图片描述

4.1分析

这个题和上面的打印日期非常的像,我们多加一个year的考虑即可

4.2代码

#include <iostream>
using namespace std;
int dayTab[2][13] = {
    {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
int IsLeapYear(int year) {           //是否为闰年
    if((year % 4 == 0 && year % 100 != 0 ) || (year % 400 == 0))
    {
        return 1;
    }
    else {
        return 0;
    }
}
int main() {
    int year, month, day, n, number;
    scanf("%d", &n);
    while (n--) {
        scanf("%d %d %d %d", &year, &month, &day, &number);
        day+=number;
        int row =IsLeapYear(year);
        while(day>dayTab[row][month])
        {
            day-=dayTab[row][month];
            month++;
            if(month>12)
            {
                month=1;
                year++;
                row =IsLeapYear(year);
            }
        }
        printf("%04d-%02d-%02d\n",year,month,day);
    }
}
// 64 位输出请用 printf("%lld")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1250712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python 自动化用处太大了!|python自动整理文件,一键完成!

随着时代的发展及人工智能的到来&#xff0c;Python 自动化办公能力几乎已成为每个岗位的必备技能&#xff01; 而且到处可见的抖音、朋友圈铺天盖地宣传 Python 可以轻松达到办公自动化&#xff0c;并且学习没门槛&#xff0c;是真的吗&#xff1f; 我很负责的告诉大家&#…

数字化转型如何赋能企业实现数字化增值?

随着科技的不断发展&#xff0c;数字化转型已经成为了企业营销的重要趋势。数字化转型不仅可以提高企业的运营效率&#xff0c;还可以更好地满足消费者的需求&#xff0c;提升企业的市场竞争力。 一、数字化转型可以提高企业营销的精准性 在传统的企业营销中&#xff0c;营销人…

透过对话聊天聊网络tcp三次握手四次挥手

序 说起来网络&#xff0c;就让我想起的就是一张图。我在网上可以为所欲为&#xff0c;反正你又不能顺着网线来打我。接下来我们来详细说一下网络到底是怎么连接的。 TCP三次打招呼 首先我会用男女生之间的聊天方式&#xff0c;来举一个例子。 从tcp三次握手来说&#xff0c;…

GIT版本控制和常用命令使用介绍

GIT版本控制和常用命令使用介绍 1. 版本控制1.1 历史背景1.2 什么是版本控制1.3 常见版本控制工具1.4 版本控制的分类 2 Git介绍2.1 Git 工作流程2.2 基本概念2.3 文件的四种状态2.4 忽略文件2.5 Git命令2.5.1 查看本地git配置命令2.5.2 远程库信息查看命令2.5.3 分支交互命令2…

【网络】传输层 --- 详解TCP协议

目录 一、协议段格式及其策略确认应答(ACK)机制6个标志位超时重传流量控制滑动窗口1、先谈滑动窗口一般情况2、再谈特殊窗口 拥塞控制拥塞窗口 延迟应答&&捎带应答面向字节流粘包问题 二、三次握手和四次挥手三次握手为什么是3次&#xff1f;不是2、4、5、6次呢 四次挥…

鸿蒙开发-ArkTS 语言-状态管理

鸿蒙开发-ArkTS 语言-基础语法 3. 状态管理 变量必须被装饰器装饰才能成为状态变量&#xff0c;状态变量的改变才能导致 UI 界面重新渲染 概念描述状态变量被状态装饰器装饰的变量&#xff0c;改变会引起UI的渲染更新。常规变量没有状态的变量&#xff0c;通常应用于辅助计算…

1. git入门操作

1. git入门操作 1、基本名词解释 图片 名词含义index索引区&#xff0c;暂存区master分支名&#xff0c;每个仓库都有个master&#xff0c;它作为主分支。branch其他分支&#xff0c;我们可以把master分支上的代码拷贝一份&#xff0c;重新命名为其他分支名work space就是我…

竞赛python区块链实现 - proof of work工作量证明共识算法

文章目录 0 前言1 区块链基础1.1 比特币内部结构1.2 实现的区块链数据结构1.3 注意点1.4 区块链的核心-工作量证明算法1.4.1 拜占庭将军问题1.4.2 解决办法1.4.3 代码实现 2 快速实现一个区块链2.1 什么是区块链2.2 一个完整的快包含什么2.3 什么是挖矿2.4 工作量证明算法&…

PyTorch-ReID重识别算法库与数据集资料汇总

Torchreid 是一个用于深度学习人员重新识别的库&#xff0c;用 PyTorch 编写&#xff0c;为我们的 ICCV’19 项目 Omni-Scale Feature Learning for Person Re-Identification 开发。 PyTorch-ReID的特点是 多GPU训练支持图像和视频 REID端到端培训和评估极其轻松地准备 Rei…

如何找出excel中两列数据中不同的值(IF函数的用法)

第一部分&#xff0c;举例&#xff1a; 例1&#xff1a; 如下图所示&#xff0c;A列和B列是需要比较的数据&#xff0c;C列为对比规则&#xff1a;IF(A2B2,"是","否") 示例图 例2&#xff1a;给B列的成绩评等级 C列的规则&#xff1a; IF(B2>85,&qu…

RPC和HTTP的区别

目录 1、RPC是什么 1.1 概念 1.2 RPC的组成部分 1.3 常见的 RPC 技术和框架 1.4 RPC的工作流程 2、HTTP是什么 2.1 概念 2.2 HTTP的消息格式 2.3 HTTP响应状态码有哪些 3、⭐RPC和HTTP的区别 小结 1、RPC是什么 1.1 概念 RPC&#xff08;Remote Procedure Call&am…

全国甲骨文识读大会用到哪些竞赛软件

2023年&#xff0c;全国甲骨文识读大会第1季在“中华字都安阳”举办&#xff0c;天纵竞赛软件为此次高端知识竞赛提供软件支持。 甲骨文识读大会分为海选、初赛、复赛、决赛4个阶段&#xff0c;不分年龄、性别、职业、地域&#xff0c;并邀请国内甲骨文和殷商文化方面专家学者组…

Unity-类-Vector

Vector矢量 是一个基本的数学概念,它允许你描述方向和大小。在游戏和应用中,矢量通常用于描述一些基本属性,如角色的位置、物体移动的速度或两个物体之间的距离。 矢量算术是计算机编程很多方面(如图形、物理和动画)的基础,深入了解这一主题对于充分发挥 Unity 的功能很有…

python实现炫酷的屏幕保护程序!

今天写了桌面保护程序。先来看看效果吧。 完全可以作为屏保程序了&#xff0c;老方式&#xff1a;以下是实现的代码&#xff1a; from tkinter import *from time import strftime​def update_time():global i, j current_time strftime(%H:%M:%S)time_label.config(textcu…

软件工程简明教程

软件工程简明教程 何为软件工程&#xff1f; 1968 年 NATO&#xff08;北大西洋公约组织&#xff09;提出了软件危机&#xff08;Software crisis&#xff09;一词。同年&#xff0c;为了解决软件危机问题&#xff0c;“软件工程”的概念诞生了。一门叫做软件工程的学科也就应…

前车之鉴: 适用于所有select选择框的 全选反选逻辑,如何只用单个change事件优雅完成

文章目录 实际效果1.1 效果展示1.2 核心功能 Show CodeQ & A彩蛋 实际效果 1.1 效果展示 1.2 核心功能 区别网上其他思路&#xff0c;我这里不需要使用原生点击事件&#xff0c;将全选反选逻辑收敛在一个change事件上 此前已经看过一些全选逻辑同学尝试过后&#xff0c;会…

NX二次开发UF_CURVE_ask_combine_curves 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_combine_curves Defined in: uf_curve.h int UF_CURVE_ask_combine_curves(tag_t combine_curve_feature, tag_t * first_curve_tag, UF_CURVE_combine_curves_directi…

【阿里云】图像识别 智能分类识别 增加垃圾桶开关盖功能点和OLED显示功能点(二)

一、增加垃圾桶开关盖功能 环境准备 二、PWM 频率的公式 三、pthread_detach分离线程&#xff0c;使其在退出时能够自动释放资源 四、具体代码实现 图像识别数据及调试信息wget-log打印日志文件 五、增加OLED显示功能 六、功能点实现语音交互视频 一、增加垃圾桶开关盖功能…

vue3(一)-基础入门

一、导入vue.js 1.可以借助 script 标签直接通过 CDN 来使用 Vue <!-- <script src"https://unpkg.com/vue3/dist/vue.global.js"></script> -->2.也可以下载vue.global.js文件并在本地导入 <script src"./lib/vue.global.js">&…

3、Qt使用windeploy工具打包可执行文件

新建一个文件夹&#xff0c;把要打包的可执行文件exe拷贝过来 点击输入框&#xff0c;复制一下文件夹路径 点击电脑左下角&#xff0c;找到Qt文件夹&#xff0c; 点击打开 “Qt 5.12.0 for Desktop” &#xff08;我安装的是Qt 5.12.0版本&#xff09; 输入“cd bin”&#xff…