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

        前言:在部分大厂笔试时经常会使用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;}elsereturn 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;}elsereturn 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.hqwc.cn/news/98232.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机的万年历温度无线传输控制系统系统

一、系统方案 本设计采用DS1302采集年月日时分秒&#xff0c;DS18B20采集温度值&#xff0c;按键设置温度报警上下限&#xff0c;实际测量温度低于下限或高于上限&#xff0c;蜂鸣器报警&#xff0c;同时将测量温度上传到蓝牙助手。 二、硬件设计 原理图如下&#xff1a; 三…

一文彻底吃透自动化测试框架所有知识

定义测试自动化 在任何行业中&#xff0c;自动化通常被解释为自动处理流程&#xff0c;而这些流程几乎不需要人工干预。在软件行业&#xff0c;测试自动化意味着使用许可版本或开源的自动化工具对软件应用程序执行各种测试。用技术术语来说&#xff0c;测试自动化框架是一组定制…

22 元类技术(面向切片编程)|ORM的实现|抽象类与接口类

文章目录 前情知识补充hasattr 函数setattr函数getattr函数join 函数 元类技术使用type创建类什么是元类&#xff08;概念总结&#xff09;\_\_metaclass\_\_属性使用metaclass 的函数方式进行创建类使用metaclass 的类方式进行创建类 自定义元类 元类实现ORM接口类与抽象类抽象…

初识c++

文章目录 前言一、C命名空间1、命名空间2、命名空间定义 二、第一个c程序1、c的hello world2、std命名空间的使用惯例 三、C输入&输出1、c输入&输出 四、c中缺省参数1、缺省参数概念2、缺省参数分类3、缺省参数应用 五、c中函数重载1、函数重载概念2、函数重载应用 六、…

NVIDIA CUDA Win10安装步骤

前言 windows10 版本安装 CUDA &#xff0c;首先需要下载两个安装包 CUDA toolkit&#xff08;toolkit就是指工具包&#xff09;cuDNN 1. 安装前准备 在安装CUDA之前&#xff0c;需要完成以下准备工作&#xff1a; 确认你的显卡已经正确安装&#xff0c;在设备管理器中可以看…

电商企业固定资产怎么管理

电商固定资产管理需要建立标准的固定资产管理制度&#xff0c;从规则上进行约束。同时&#xff0c;引入固定资产管理系统&#xff0c;从流程上起到直接提升效果的方式。电商标准的固定资产管理制度因公司而异&#xff0c;但通常包括以下内容&#xff1a;  固定资产的定义和分…

cesium开发入门(vue2)

一、cesium介绍 Cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎。Cesium支持3D,2D,2.5D形式的地图展示&#xff0c;可以自行绘制图形&#xff0c;高亮区域&#xff0c;并提供良好的触摸支持&#xff0c;且支持绝大多数的浏览器和mobile。 中文文档 官网 二、创建…

WebDAV之π-Disk派盘 + 无忧日记

无忧日记,生活无忧无虑。 给用户专业的手机记录工具,用户可以很轻松地通过软件进行每天发生事情的记录,可以为用户提供优质的工具与帮助,用户还可以通过软件来将地理位置,天气都记录在日记上,用户也可以通过软件来进行图片的导入,创建长图日记, 心情报表:用户写日记…

Spring MVC 五 - DispatcherServlet初始化过程(续)

今天的内容是SpringMVC的初始化过程&#xff0c;其实也就是DispatcherServilet的初始化过程。 Special Bean Types DispatcherServlet委托如下一些特殊的bean来处理请求、并渲染正确的返回。这些特殊的bean是Spring MVC框架管理的bean、按照Spring框架的约定处理相关请求&…

计算机竞赛 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

文章目录 0 简介1 二维码检测2 算法实现流程3 特征提取4 特征分类5 后处理6 代码实现5 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器学习的二维码识别检测 - opencv 二维码 识别检测 机器视觉 该项目较为新颖&#xff0c;适合作为竞赛课…

宝塔面板开心版出问题升级到正版的解决方案,有效解决TypeError: ‘NoneType‘ object is not subscriptable

服务器之前图开心装了个宝塔面板的开心版&#xff0c;前几天突然出现问题&#xff0c;报错TypeError: ‘NoneType’ object is not subscriptable。没法正常打开软件商店&#xff0c;也没法修复和升级系统&#xff0c;很烦躁。因为里面很多业务还在跑&#xff0c;实在不想重装。…

DSP_TMS320F28377D_算法加速方法4_C语言编程优化

前面3篇的优化思路是从硬件本身和函数库这些方向去加速&#xff0c; 本文则仅从代码本身的效率去考虑加速的方法。 1、用全局变量比用局部变量快 void testfunction1(){ // 局部变量int i;double s,a,b;a 1.023;b 12.23;for(i 0; i < 1000; i){s __divf32(a,b);} }int …