OJ题库:计算日期到天数转换、打印从1到最大的n位数 、尼科彻斯定理

news2024/11/24 20:02:02

        前言:在部分大厂笔试时经常会使用OJ题目,这里对《华为机试》和《剑指offer》中的部分题目进行思路分析和讲解,希望对各位读者有所帮助。

题目来自牛客网,欢迎各位积极挑战:

HJ73:计算日期到天数转换_牛客网

JZ17:打印从1到最大的n位数_牛客网

HJ76:尼科彻斯定理_牛客网

目录

HJ73 计算日期到天数转换

题目相关消息

题目描述

输入描述 

输出描述 

示例

 分析问题解决思路

具体实现细节: 

 完整代码实现

JZ17 打印从1到最大的n位数

题目相关消息

描述

示例

分析问题解决思路

具体实现细节

 完整代码实现

HJ76 尼科彻斯定理

题目相关信息

题目描述

 输入描述

输出描述

示例 

分析问题解决思路 

具体实现细节

完整代码实现


HJ73 计算日期到天数转换

题目相关消息

题目描述

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

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

进阶:时间复杂度: O(n) ,空间复杂度: O(1) 

输入描述 

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

输出描述 

输出是这一年的第几天

示例

输入:2012 12 31

输出:366

输入:1982 3 4

输出:63

 分析问题解决思路

题目让我们输出有多少天,只要解决了以下俩个小问题,问题就迎刃而解了

  1. 闰年的情况,我们需要判断输入是否是闰年,在闰年内,2月是29天,这是与正常平年不同的情况,因此我们需要设计和函数来判断是否是闰年
  2. 我们在判断的时候应该使用累加的思想,从1月累加到目标月,但是值得注意的一点是,目标月不能直接加当前月份总的天数,应该加上用户输入的天数

具体实现细节: 

        首先我们需要先设计一个判断闰年的函数,如果是闰年就返回1,不是就返回0,方便后续进行调用判断:

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

        主函数方面,我们定义一个整形变量 days 来记录从这一年的第一天到现在一共有多少天,定义 year, month, day三个整形变量分别来记录用户输入的值,从一月开始遍历到目标月,不包含目标月,如果是大月 days 就加31,如果是小月就加30,另外在2月的时候,使用一个 if 语句来判断当前 2 月有多少天

        //大月
		if ((months == 1) || (months == 3) || (months == 5) || (months == 7) || (months == 8) || (months == 10) || (months == 12))
		{
			days += 31;
		}
		//小月
		else if ((months == 4) || (months == 6) || (months == 9) || (months == 11))
		{
			days += 30;
		}
		//二月
		else
		{
			//润年
			if (ret == 1)
			{
				days += 29;
			}
			//平年
			else
			{
				days += 28;
			}
		}

 完整代码实现

//HJ73
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

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

int main()
{
	int year = 0;
	int month = 0;
	int day = 0;
	int days = 0;
	scanf("%d %d %d", &year, &month, &day);

	//判断是否是闰年
	int ret = judgeleapyear(year);

	//从一月加到目标月
	for (int months = 1; months < month; months++)
	{
		//大月
		if ((months == 1) || (months == 3) || (months == 5) || (months == 7) || (months == 8) || (months == 10) || (months == 12))
		{
			days += 31;
		}
		//小月
		else if ((months == 4) || (months == 6) || (months == 9) || (months == 11))
		{
			days += 30;
		}
		//二月
		else
		{
			//润年
			if (ret == 1)
			{
				days += 29;
			}
			//平年
			else
			{
				days += 28;
			}
		}
	}

	days += day;
	printf("%d", days);


	return 0;
}

JZ17 打印从1到最大的n位数

题目相关消息

描述

        输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。

  1.  用返回一个整数列表来代替打印
  2.  n 为正整数,0 < n <= 5

示例

输入:1

返回值:[1,2,3,4,5,6,7,8,9]

        注意,这道题目是接口题,我们只需要完善题目给出的函数就可以了,将需要返回的值返回就完成了

int* printNumbers(int n, int* returnSize)
{

}

分析问题解决思路

        首先,我们需要明确一件事,这道题是接口题,我们不能像普通的 ACM 模式的题那样写个循环直接打印,我们需要将数据放在一块空间内,然后将其返回

        既然是要放在空间内,那我们就使用 malloc 函数来动态开辟空间,最后在这些空间内逐个赋值就可以了

具体实现细节

        首先我们得先明确数值的范围,如下所示的过程中,我们不难发现,这是次方的关系,也就是说 10^n-1 就是数值的最大值

  • 1 位数的数值就是 1~9
  • 2 位数的数值就是 1~99
  • 3 位数的数值就是 1~999
  • 4 位数的数值就是 1~9999

        那么在这里我们就使用 <math.h> 头文件中的库函数 pow 来实现次方的效果,这样我们就获得了数值的大小范围

    //返回数组元素的个数
    *returnSize = pow(10, n) - 1;

        接下来就是动态分配空间,在这里需要注意的是要进行强制类型转化,不然会因为前后类型不一致导致 bug,一个整形大小是 sizeof(int),一共有 *returnsize 个整形

     //动态分配空间
    int* arr = (int*)malloc(*returnSize * sizeof(int));//malloc(字节数)

最后赋值就非常简单了,使用 for 循环实现就可以了

    //赋值
    for (int i = 0; i < *returnSize; ++i)
    {
        *(arr + i) = i + 1;
    }

 完整代码实现

int* printNumbers(int n, int* returnSize)
{
    //返回数组元素的个数
    *returnSize = pow(10, n) - 1;
    //动态分配空间
    int* arr = (int*)malloc(*returnSize * sizeof(int));//malloc(字节数)
    //赋值
    for (int i = 0; i < *returnSize; ++i)
    {
        *(arr + i) = i + 1;
    }
    //返回
    return arr;
}

HJ76 尼科彻斯定理

题目相关信息

题目描述

验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和

例如:

1^3=1

2^3=3+5

3^3=7+9+11

4^3=13+15+17+19

输入一个正整数m(m≤100),将m的立方写成m个连续奇数之和的形式输出

数据范围: 1≤m≤100 

进阶:时间复杂度:O(m) ,空间复杂度:O(1) 

 输入描述

输入一个int整数

输出描述

输出分解后的string

示例 

输入:6

输出:31+33+35+37+39+41

分析问题解决思路 

首先,我们必须得理解这个题目背后的数学原理,我们举例如下

        我们会发现,在多项式中的第一项和最后一项是有迹可循的,我们对于第一项和最后一项的总结如下

  1. 第一项:(n-1)^2+((n-1)-1)+2
  2. 最后一项:n^2+(n-1)

具体实现细节

我们先使用俩个变量来找到刚才所描述的第一项和最后一项

	int m_first = 0;
	int m_end = 0;

	m_first = (m - 1) * (m - 1) + (((m - 1) - 1) + 2);
	m_end = (m * m) + (m - 1);

        在找到第一项后,我们就可以使用遍历累加来打印了,在尼科彻斯定理表示的多项式中,多项式的数量要表达的整数m是一样的,都是m,基于此,我们就可以使用循环了,每一次都打印一个奇数,然后在让这个奇数加 2,最后再直接打印最后一项

	for (int i = 0; i < (m - 1); i++)
	{
		printf("%d+", m_first);
		m_first += 2;
	}
	printf("%d", m_end);

完整代码实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>

void math_N(int m)
{
	int m_first = 0;
	int m_end = 0;

	m_first = (m - 1) * (m - 1) + (((m - 1) - 1) + 2);
	m_end = (m * m) + (m - 1);

	for (int i = 0; i < (m - 1); i++)
	{
		printf("%d+", m_first);
		m_first += 2;
	}
	printf("%d", m_end);
}

int main()
{
	int m = 0;
	scanf("%d", &m);

	math_N(m);

	return 0;
}

本次分享就到此结束了,希望我的分享对您有所帮助

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

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

相关文章

17|诗中哲学:读了这些理趣诗之后,我悟了!

好诗相伴&#xff0c;千金不换。你好&#xff0c;我是天博。 今天&#xff0c;我们要讲的主题&#xff0c;仍然是“见众生”。在“见众生”的前几讲里&#xff0c;我们讲的都是诗人面对众生感性的一面&#xff0c;比如杜甫的悲悯啦、刘禹锡的耿直啦&#xff0c;还有女性的视角…

迅为STM32MP157开发板安装Qemu-User-Static工具

QEMU 是专门模拟不同机器架构的软件&#xff0c;在 ubuntu 中对其支持良好&#xff0c;若需要挂载 ubuntu armhf 版本的文件&#xff0c;必须安装 qemu-user-static 工具。 首先 Ubuntu 下使用命令“sudo apt-get install qemu-user-static”安装&#xff0c;安装过程中按 y 继…

基于Java+SpringBoot+Vue前后端分离个人博客系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

浅分析安防视频监控平台EasyCVR视频融合平台接入大量设备后如何维持负载均衡

安防视频监控平台EasyCVR视频融合平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备…

Pycharm配置及使用Git教程

文章目录 1. 安装PyCharm2. 安装Git3. 在PyCharm中配置Git插件4. 连接远程Gtilab仓库5. Clone项目代码6. 将本地文件提交到远程仓库6.1 git add6.2 git commit6.3 git push6.4 git pull 平时习惯在windows下开发&#xff0c;但是我们又需要实时将远方仓库的代码clone到本地&…

OJ练习第163题——反转字符串中的单词

反转字符串中的单词 力扣链接&#xff1a;151. 反转字符串中的单词 题目描述 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空…

南方科技大学博士研究生奖助学金,深圳大学

目录 南方科技大学 中南大学 南京大学 厦门大学 苏州大学 中南财经政法大学 深圳大学 南方科技大学 https://ocean.sustech.edu.cn/ocean/public/upload/download/3/2.pdf 南方科技大学的在读研究生&#xff0c;每人每年都会得到40000元的补助&#xff0c;这40000块钱分…

Redis集群服务器

集群简介 试想有一家餐厅&#xff0c;如果顾客人数较少&#xff0c;那么餐厅只需要一个服务员即可&#xff0c;如图1。但是&#xff0c;当顾客人数非常多时&#xff0c;一个服务员是绝对不够的&#xff0c;如图2。此时&#xff0c;餐厅需要雇用更多的服务员来解决大量访问&…

运算符重载(个人学习笔记黑马学习)

1、加号运算符重载 #include <iostream> using namespace std; #include <string>//加号运算符重载 class Person { public://1、成员函数重载号//Person operator(Person& p) {// Person temp;// temp.m_A this->m_A p.m_A;// temp.m_B this->m_B p…

算法:移除数组中的val的所有元素---双指针[2]

1、题目&#xff1a; 给你一个数组 nums和一个值 val&#xff0c;你需要原地移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组。 元素的顺序可以改变。你不需要考虑数组…

外包干了2个月,技术退步明显了...

先说一下自己的情况&#xff0c;大专生&#xff0c;19年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年8月份&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

AFG EDI 解决方案

AFG一直是汽车行业出境物流的专家&#xff0c;不仅运输汽车&#xff0c;同时也提供模块化IT解决方案&#xff0c;用于接收、控制、互联以及整个车辆调度过程的可视化和监控。 对于物流行业而言&#xff0c;如果已经确定了供应链整合的目标&#xff0c;但却没有明确的计划及足够…

渗透测试:Linux提权精讲(四)之sudo方法第四期

目录 写在开头 sudo screen sudo script sudo sed sudo service sudo socat sudo ssh sudo ssh-keygen sudo strace sudo systemctl sudo tcpdump sudo tee sudo timedatectl sudo tmux sudo vi sudo wall sudo watch sudo wget sudo xxd sudo zip 总结…

软件测试/测试开发丨Web自动化测试 cookie复用

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27165 一、cookie简介 cookie是一些数据&#xff0c;存储于用户电脑的文本文件中 当web服务器想浏览器发送web页面时&#xff0c;在链接关闭后&#xff0c…

RK3588平台产测之ArmSoM-W3 DDR压力测试

1. 简介 RK3588从入门到精通 ArmSoM团队在产品量产之前都会对产品做几次专业化的功能测试以及性能压力测试&#xff0c;以此来保证产品的质量以及稳定性 优秀的产品都要进行多次全方位的功能测试以及性能压力测试才能够经得起市场的检验 2. 环境介绍 硬件环境&#xff1a; …

java八股文面试[多线程]——FutureTask

FutureTask介绍 FutureTask是一个可以取消异步任务的类。FutureTask对Future做的一个基本实现。可以调用方法去开始和取消一个任务。 一般是配合Callable去使用。 异步任务启动之后&#xff0c;可以获取一个绑定当前异步任务的FutureTask。 可以基于FutureTask的方法去取消…

APP运营的核心是什么?

APP的运营的核心就是用户运营&#xff0c;主要分为四个指标&#xff1a;用户拉新、留存、促活、转化&#xff08;营收&#xff09;下面进行一一分析。 一、APP用户拉新&#xff1a;提高用户精准度 用户拉新&#xff0c;无非是把APP推广出去进行品牌曝光&#xff0c;提高下载量…

将 ordinals 与 比特币智能合约集成 : 第 1 部分

将序数与比特币智能合约集成&#xff1a;第 1 部分 最近&#xff0c;比特币序数在区块链领域引起了广泛关注。 据称&#xff0c;与以太坊 ERC-721 等其他代币标准相比&#xff0c;Ordinals 的一个主要缺点是缺乏对智能合约的支持。 我们展示了如何向 Ordinals 添加智能合约功…

CPU与GPU渲染的差异有哪些?最佳3D渲染 GPU推荐

什么是 GPU 渲染&#xff1f; GPU 渲染使您可以使用显卡而不是 CPU 进行渲染。从广义上讲&#xff0c;GPU渲染允许许多并行操作同时运行。这提高了执行速度&#xff0c;因为现代 GPU 旨在计算大量数据。快速渲染使 GPU 能够实时处理图形。但是&#xff0c;在这种情况下&#x…

前后端中的异步和事件机制 | 前后端开发

前言 在前后端程序设计开发工作中&#xff0c;小伙伴们一定都接触过事件、异步这些概念。出现这些概念的原因之一是&#xff0c;我们的代码在执行过程中所涉及的逻辑在不同的场合下执行时间的期望是各不相同的。为了尽量做到充分利用CPU等资源做尽可能多的事&#xff0c;免不了…