【OJ】求和与计算日期

news2024/12/25 14:12:30

文章目录

  • 1. 前言
  • 2. JZ64 求1+2+3+...+n
    • 2.1 题目分析
    • 2.2 代码
  • 3. HJ73 计算日期到天数转换
    • 3.1 题目分析
    • 3.2 代码
  • 4. KY222 打印日期
    • 4.1 题目分析
    • 4.2 代码

1. 前言

下面两个题目均来自牛客,使用的编程语言是c++,分享个人的一些思路和代码。

2. JZ64 求1+2+3+…+n

在这里插入图片描述

2.1 题目分析

注意看题目描述,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句。
在这里插入图片描述
按照之前的想法,可以用递归,循环,等差求和,但是这里都被限制了,那么该怎么办呢?

那么就走构造函数,先定义一个Sum类,其中包含两个静态变量。这两个变量并不是属于这个某个对象,而是属于整个类。
在构造函数里面走静态变量,每次加等_i,再让_i加加。
在这里插入图片描述
现在就存在一个问题,怎么让Sum调用n次?
那就构造n个对象就可以了,用数组来构造就行。

要拿到最后的结果,还得再写一个成员函数来返回最后得到的_ret值,因为是再整个类中,所以使用static修饰。
在这里插入图片描述
这样就通过了。
在这里插入图片描述

2.2 代码

class Sum
{
 private:
         static int _i;
         static int _ret;

 public:
       Sum()
       {
        _ret+=_i;
        _i++;
       }
       static int GetRet()
       {
        return _ret;
       }

};
int Sum::_i=1;
int Sum::_ret=0;
class Solution {
public:
    int Sum_Solution(int n) {
        Sum s[n];
        return Sum::GetRet();      
    }
};

3. HJ73 计算日期到天数转换

在这里插入图片描述

3.1 题目分析

题目要求根据输入的日期,计算是这一年的第几天。
我们会直接想到把每个月的天数直接相加就行,但是前提是得知道每个月有多少天,而2月份在闰年是29,所以得先判断一下是不是闰年。
就先写一个函数来判断是不是闰年,如果是就返回true,不是就返回false。

bool is_is_Leapyear(int year) {
    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
        return true;
    }
    else {
        return false;
    }
}

要直接相加对应月的天数,直接写一个数组来表示每个月有多少天,让对应的下标就是对应的月。

 int monthDays[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

在设计求和的时候会出现把当月的天数直接相加的,但是会存在这个月并不是刚好是最后一天,所以得事先将求和的变量直接定义成那个月所对应的天 int sum = d;

在实现相加之前可以先判断是不是闰年而且月份必须大于2月份,相加的时候才会先多加1。
再让月份减减,实现每个月对应的都相加上,最后将总和的天数sum输出就行。
在这里插入图片描述

3.2 代码

#include <iostream>
using namespace std;

bool is_Leapyear(int year) {
    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
        return true;
    }
    else {
        return false;
    }
}

int main() {

    int y, m, d;
    int monthDays[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    cin >> y >> m >> d;// 注意 while 处理多个 case
    int sum = d;

    if (is_is_Leapyear(y)) {
        if (m > 2) {
            sum = sum + 1;
        }
    }
    while (m) {
        m--;
        sum += monthDays[m];
    }
    cout << sum << endl;
}

4. KY222 打印日期

在这里插入图片描述

4.1 题目分析

这里与上面的计算日期到天数转换类似,不过这里是给定天数来计算日期。
同样先写一个判断是不是闰年的函数。
这里因为要用到减,所以先定义两个数组,一个是闰年的,一个不是。

    int monthDays[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int monthDays_[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

我们了解到月份中最小的是2月份,最少是28天,可以作为循环的条件。
但是得注意,如果事先给的日期小于28,并不是0月,而是1月,这里就得在定义月份的时候直接先定为1,int m = 1;
在减对应月份的日期时候得注意判断条件,必须是那个月份对应的日期,而且闰年与平年还是不一样的,所以这里是这样写的。

          if (is_Bisseextile(y))
            {
                if (d > monthDays_[m-1])
                {
                    d = d - monthDays_[m-1];
                }
                else
                    break;
            }
            else if(d > monthDays[m-1])
            {
                d = d - monthDays[m-1 ];
            }

注意题目最后的打印,它格式是有要求的
在这里插入图片描述
所以这里的打印得这样写:

printf("%04d-%02d-%02d\n", y, m, d);

在这里插入图片描述

4.2 代码

#include <iostream>
using namespace std;

bool is_Bisseextile(int year) {
    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
        return true;
    }
    else {
        return false;
    }
}

int main() {
    int y, d;
    int monthDays[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int monthDays_[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    while (cin >> y >> d) {// 注意 while 处理多个 case
        int m = 1;
        
        while (d > 28)
        {
            if (is_Bisseextile(y))
            {
                if (d > monthDays_[m-1])
                {
                    d = d - monthDays_[m-1];
                }
                else
                    break;
            }
            else if(d > monthDays[m-1])
            {
                d = d - monthDays[m-1 ];
            }
            m++;

        }
        printf("%04d-%02d-%02d\n", y, m, d);

    }
}

有问题请指出,大家一起进步吧!!!

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

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

相关文章

117.移除链表元素(力扣)

题目描述 代码解决 class Solution { public:ListNode* removeElements(ListNode* head, int val) {//删除头节点while(head!NULL&&head->valval){ListNode*tmphead;headhead->next;delete tmp;}//删除非头节点ListNode*curhead;while(cur!NULL&&cur-&g…

阿里云国际云解析DNS如何开启/关闭流量分析?

流量分析服务会涉及产生日志费用&#xff0c;所以开通内网DNS解析服务后&#xff0c;默认不会主动开启流量分析&#xff0c;需要您手动开启流量分析。对于未开启流量分析的用户&#xff0c;进入界面会提示您展示的都是模拟数据&#xff0c;您可以点击开启流量分析服务&#xff…

Vue+SpringBoot打造城市桥梁道路管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询城市桥梁4.2 新增城市桥梁4.3 编辑城市桥梁4.4 删除城市桥梁4.5 查询单个城市桥梁 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的城市桥梁道路管理系统&#xff0c;支持…

(十六)【Jmeter】取样器(Sampler)之测试活动(Test Action)

简述 操作路径如下: JMeter中的测试活动取样器实际上并不是一个具体的取样器类型,而是一种对测试计划中的多个取样器进行组合和执行的活动。常常被用作定时器,在某个请求之后等待多长时间。 参数说明 Logical Action on Thread(在线程上的逻辑操作) Pause Duration(mil…

“羊驼“入侵CV,美团浙大沈春华团队将LLaMA向CV扩展,构建全新基础模型VisionLLaMA

本文首发:AIWalker https://arxiv.org/abs/2403.00522 https://github.com/Meituan-AutoML/VisionLLaMA 本文概述 大型语言模型构建在基于Transformer的架构之上来处理文本输入, LLaMA 系列模型在众多开源实现中脱颖而出。类似LLaMa的Transformer可以用来处理2D图像吗&#xf…

关于数据库基本概念与基本介绍

​ 数据库是 一个组织良好的数据集合&#xff0c;旨在方便多个用户高效地共享信息资源 。以下是关于数据库的一些基本介绍&#xff1a; 1. 定义和目的&#xff1a;数据库是一个电子化的数据存储系统&#xff0c;设计用来存储、管理和检索数据。它允许用户或应用程序以各种复杂的…

【代码随想录算法训练营Day35】435.无重叠区间;763.划分字母区间;56.合并区间

文章目录 ❇️Day 36 第八章 贪心算法 part05✴️今日任务❇️435. 无重叠区间自己的思路自己的代码&#xff08;✅通过81.59%&#xff09;随想录思路随想录代码 ❇️763.划分字母区间自己的思路自己的代码&#xff08;✅通过55.30%&#xff09;随想录思路随想录代码 ❇️56. 合…

计算机网络-网络安全(二)

1.应用层安全协议&#xff1a; S-HTTP或SHTTP&#xff08;Sec HTTP&#xff09;&#xff0c;安全超文本传输协议&#xff0c;是HTTP扩展&#xff0c;使用TCP的80端口。HTTPS&#xff1a;HTTPSSL&#xff0c;使用TCP的443端口。和TLS&#xff08;传输层安全标准&#xff09;是双…

Linux 安装 Mysql 8.0

获取 Mysql 8.0 在 /usr/local下 创建mysql文件夹 mkdir mysql切换到mysql文件夹下 cd mysql下载mysql wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz解压mysql tar xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz重命名…

CSS技巧:实现两个div在同一行显示的方法

css如何让两个div在同一行显示 - web开发 - 亿速云 在Web开发中&#xff0c;经常遇到需要将多个元素水平排列在同一行的情况。其中一个常见的需求是将两个div元素放置在同一行上&#xff0c;使它们并排显示。在本文中&#xff0c;我们将介绍几种实现这一效果的CSS方法。 1. 使…

网络学习:SMart link技术与Monitor link技术

目录 一、SMart link技术 1.1、SMart link技术简介 1.2、SMart link技术原理及基础知识点 1、应用场景&#xff08;举例&#xff09;&#xff1a; 2、运行机制 3、保护vlan 4、控制VLAN 5、Flush报文 6、SMart link的负载分担机制 7、SMart link角色抢占模式 二、Mo…

MySQL的Redo Log、Undo Log、Binlog与Replay Log日志

前言 MySQL数据库作为业界最流行的开源关系型数据库之一&#xff0c;其底层实现涉及多种重要的日志机制&#xff0c;其中包括Redo Log、Undo Log、Binlog和Replay Log。这些日志组件共同确保MySQL数据库系统在面对事务处理、数据恢复和主从复制等方面表现出色。本文主要介绍一下…

08 OpenCV 腐蚀和膨胀

文章目录 作用算子代码 作用 膨胀与腐蚀是数学形态学在图像处理中最基础的操作。其卷积操作非常简单&#xff0c;对于图像的每个像素&#xff0c;取其一定的邻域&#xff0c;计算最大值/最小值作为新图像对应像素位置的像素值。其中,取最大值就是膨胀&#xff0c;取最小值就是腐…

就业班 2401--3.4 Linux Day10--软件管理

一、软件管理 导语&#xff1a; 安装软件 rpm yum 源码安装 ​ 卸载软件 rpm介绍 rpm软件包名称: 软件名称 版本号(主版本、次版本、修订号) 操作系统 -----90%的规律 #有依赖关系,不能自动解决依赖关系。 举例&#xff1a;openssh-6.6.1p1-31.el7.x86_64.rpm 数字前面的是名…

SpringBoot多数据源配置(MySql、Oracle)

一、依赖 <!-- dynamic-datasource 多数据源--><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId></dependency><!--oracle驱动--><dependency><groupI…

机器视觉——硬件选型

1、相机选型 在选择机器视觉相机时&#xff0c;通常需要考虑以下几个方面&#xff1a; 1、分辨率&#xff1a;相机的分辨率决定了其拍摄图像的清晰度和细节程度。根据具体的应用需求&#xff0c;可以选择适当的分辨率范围。 2、帧率&#xff1a;帧率表示相机每秒钟能够拍摄的…

linux无法启动dhcp服务--Failed to start DHCPv4 Server Daemon.错误

linux dhcp服务搭建详细过程请看 linux系统dhcp服务部署 关于dhcp服务无法启动Failed to start DHCPv4 Server Daemon.错误 解决方法&#xff1a;虚拟网络编辑器中的也就是dhcp所要服务的子网ip地址要与dhcp.conf中的服务网段ip一致&#xff08;与上面subnet 192.168.1.0一致…

伊理威科技:抖音上开店铺需要什么条件

在数字浪潮的推动下&#xff0c;抖音已成为连接品牌与消费者的新桥梁。若想在此平台开设小店&#xff0c;需满足一系列条件&#xff0c;方可乘风破浪。首要条件是拥有一张有效的身份证明或企业营业执照&#xff0c;这是验证商家身份和合法经营的基础。接着&#xff0c;商品质量…

[C语言]——C语言常见概念(2)

目录 一.第⼀个C语言程序 二.main函数 三.print和库函数 1.print 2.库函数 四.关键字介绍 一.第⼀个C语言程序 #include <stdio.h> int main() {printf("hello C\n");return 0;//约定返回0&#xff0c;在c语言中&#xff0c;正常返回0&#xff0c;异常…

值得一看的博客

值得一看的blog GitHub - mqyqingfeng/Blog: 冴羽写博客的地方&#xff0c;预计写四个系列&#xff1a;JavaScript深入系列、JavaScript专题系列、ES6系列、React系列。 LogRocket Blog - Resources to Help Product Teams Ship Amazing Digital Experiences React Blog – Re…