华为OJ之初级篇Ⅰ

news/2023/10/4 1:11:16

前言

本文章旨在提供一个互相学习和交流的平台,也作为OJ刷题这段时光的记录。本人非计算机科班出身,程序主要以实现功能性需求为主,暂不考虑性能、质量等因素。以下OJ题目顺序为成功通过机器验证的顺序,本篇题目全出自初级题系列。为了保证本文界面的简洁性,代码以代码片形式给出,见相关“答案点这里”链接。
1.在字符串中找出连续最长的数字串
题目概述

请一个在字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串;
注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串“1234”的长度就小于数字串“1359055”,如果没有数字,则返回空字符串(“”)而不是NULL!


答案点这里


思路及小结

遍历输入字符串的每个字符,遇到数字字符,即'0'-'9'之间的字符,记录下数字串的起始地址及长度len_tem,一段数字串结束后将起始地址及长度赋给str及len,将下一次保存的数字串长度tem_len与len相比较,保存长度较长的数字串起始地址及长度。遍历完之后,首先分配数字串大小为(len + 1)的空间,将保存的数字串复制到给空间后,若len为0,则将分配的空间赋为"",最后将该空间的地址赋给输出字符串。

2.对象管理器

题目概述

实现对象管理器功能,其中管理的对象有3个外部关键字,要求实现:
增加对象;
删除对象;
判断对象是否存在;
说明: 对象的三个外部关键字分别以KEY1,KEY2,KEY3表示。
对象的3个外部关键字KEY1,KEY2,KEY3, 其取值范围都为:0~65535;
对象总个数小于等于10000;
以上规格由用例保证。


答案1点这里     答案2点这里


思路及小结

答案1为容器方式实现,答案2用链表实现。该题实质为对c++中vector的基本操作或者说是c语言中链表的基本操作。当然用vector方式显得更为直观。

3.删除重复字符

题目概述

删除重复字符

给定一个字符串,将字符串中所有和前面重复多余的字符删除,其余字符保留,输出处理后的字符串。需要保证字符出现的先后顺序,并且区分大小写。


答案点这里


思路及小结

用一个bool型的数组表示字符的重复情况,该数组大小为129,使用前先全初始化为false,ascii码最大为127,因此129长度足够了,遍历输入字符串的每一个字符,若对应字符的状态为false,将其加到输出字符串中去,并将字符的bool状态置为true,下一次就不保存该字符了。

4.24点游戏算法

题目概述

给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利


答案点这里


思路及小结

此题为第一个设计到较复杂算法的题,由于是4个操作数,3个运算符,将每一次运算看做一个单元,该单元的结果可能和下一个操作数用下一个运算符构成下一个单元,因此有三个单元,穷举所有可能的运算方式,包括加入括号的情况。具体分析如下:

假如操作数为a,b,c,d,操作符用_代替,其中a,b,c,d的顺序不固定(见实际代码实现过程),_可能取+、-、*、/。加入括号,总共有5种可能的运算方式情形:

1.((a_b)_c)_d

2.a_((b_c)_d)

3.(a_(b_c))_d

4.a_(b_(c_d))

5.((a_b)_(c_d))

根据上面的概念约定,一个单元(即程序中的函数)包括一个运算符及两个操作数,结果为运算结果。将该单元记为函数float oper(int f,float var1,float var2);因此上述5种情况的第一种可表示为:

float result = oper(f3,oper(f2,oper(f1,a,b),c),d);

其中,result为四个操作数运算后的结果,f1,f2,f3分别表示1中第一、二、三个"_"表示的运算符。2、3、4、5情况的表示以此类推。将result的结果和24进行比较,考虑到存在除法的情况,允许一定范围的误差。若result和24接近表示操作数a,b,c,d可构成24点,返回true,结束,在程序的结尾返回false,表示未找到。

以上算法非本人原创,根据一个24点网页小应用改编,点此进入,感兴趣可以参考一下其源码。

5.周期串问题

题目概述
如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也可以6和12为周期,结果取最小周期3)。字符串的长度小于等于100,由调用者保证。
接口说明
原型:
    int GetMinPeriod(char *inputstring);
输入参数:
    char * inputstring:字符串
返回值:
    int 字符串最小周期

答案点这里

思路及小结

先找周期。由于周期必然能被字符串长度整除,因此以1到字符串长度为因子,判断是否能被字符串长度整除,若可以整除,遍历输入字符串,判断是否周期性重复。

6.最后一个单词长度

题目概述
求输入字符串最后一个单词的长度,如hello world,返回5。

输入参数:
    字符串,最大长度为128
返回值:
    最后一个单词长度

答案点这里

思路及小结

从后往前找空格,然后输出空格之后字符长度。若未找到空格,输出字符串长度。



7.百分制成绩

简要描述:给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。90分以上为A 80-89分为B 70-79分为C 60-69分为D 60分以下为E



输入:一个整数0-100以内

输出:一个字符,表示成绩等级

例如:输入:90

输出:A

答案点这里


8.阿姆斯特朗数

简要描述:如果一个正整数等于其各个数字的立方和,则该数称为阿姆斯特朗数(亦称为自恋性数),1除外,如407 = 43+03+73就是一个阿姆斯特朗数。试编程求n(n ≤ 65536)以内的所有阿姆斯特朗数。



接口说明

原型:

int CalcArmstrongNumber(int n);

输入参数:

int n: n ≤ 65536



返回值:

n以内的阿姆斯特朗数的数量
答案点这里

9.查找同构数的数量

简要描述:找出1至n之间同构数的个数。同构数是这样一组数:它出现在平方数的右边。例如:5是25右边的数,25是625右边的数,5和25都是同构数。

详细描述:

接口说明

原型:

intSearchSameConstructNum(int n);

输入参数:

int n:查找1至n之间的全部同构数

返回值:

int:1至n之间同构数的个数

答案点这里

10.二维数组的列排序

简要描述:给出一个二维数组,请将这个二维数组按第i列(i从1开始)排序,如果第i列相同,则对相同的行按第i+1列的元素排序,如果第i+1列的元素也相同,则继续比较第i+2列,以此类推,直到最后一列。如果第i列到最后一列都相同,则按原序排列。



实现以下接口:

输入一个m*n 的整数数组,实现按规则排列,返回排列后的数组。

调用者会保证:

比如输入数组为: 

1,2,3

2,3,4

2,3,1

1,3,1

按第二列排序: 

输出: 

1,2,3

2,3,1

1,3,1

2,3,4
答案点这里

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ExtJs自学教程(1):一切从API开始

题 记该系列文章不侧重全方位的去介绍ExtJs的使用,只是侧重于解决ExtJs问题的思考方法。写的人不用长篇大论,学的人则能够自立更生。l 学习的人只要有一些CSS的javascript的基础知识并且对于英文不至于非常蹩脚(以辅助词霸能看懂ExtJs的API…

ExtJs自学教程(2):从DOM看EXTJS

《二》 从DOM看EXTJS看标题可能有人会问,为啥好好的例子不看,得从DOM看起呢?答案是目标只为了一个:自运行结果把EXTJS看得更清楚点 首先,要看得靠点工具,带点放大镜什么吧?对。我们需要的工具…

java过滤器和监听器详解

过滤器 1、Filter工作原理(执行流程) 当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头…

Java Web中的EL(表达式语言)详解

Java Web中的EL(表达式语言)详解 表达式语言(Expression Language)简称EL,它是JSP2.0中引入的一个新内容。通过EL可以简化在JSP开发中对对象的引用,从而规范页面代码,增加程序的可读性及可维护性。EL为不熟悉Java语言页…

PowerDesigner入门教程

PowerDesigner安装方法:http://dev.firnow.com/course/3_program/java/javajs/20090908/174375.html安装完这2个软件了,接着就开始使用吧,还是和以前一样,先提出需求,再做实例,因为我们之所以使用它们,肯定是因为它们能巧妙的解决某种问题,不然我们干嘛花那么多时间和硬盘空间安…

PowerDesigner(一)-PowerDesigner概述(系统分析与建模)

PowerDesigner概述 PowerDesigner是Sybase公司推出的一个集成了企业架构,UML(统一建模语言)和数据库的CASE(计算机辅助软件工程)工具。它不仅可以用于系统设计和开发的不同阶段(即业务分析,概念模型设计,物理模型设计以及面向对象开发阶段)&a…

PowerDesigner(二)-项目和框架矩阵

项目和框架矩阵 项目是PowerDesigner 15的新概念,通过项目系统分析/设计人员可以对模型以及各类文档进行分组。项目也可以包含框架矩阵,以表格的形式体现各个模型之间的关系。 项目和框架矩阵解决了如何对模型进行统一管理的问题。 1.创建框架矩阵(FEAF-…

PowerDesigner(三)-企业架构模型

企业架构模型(Enterprise Architecture Model,EAM)是PowerDesigner 15新增的功能,它能够以图形的方式展现企业架构,从而取代文字描述;以偏向非技术性的表达方式,从不同层面表达不同的图示结果。 企业架构模型从业务层,…

PowerDesigner(四)-业务处理模型

业务处理模型 业务处理模型(Business Process Model,BPM)以业务需求作为出发点,用图形的方式描述系统的任务和业务流程,注重的是处理过程中数据流程。业务处理模型是从业务人员的角度对业务逻辑和规则进行详细描述的概念模型,并使用流程 图表…

PowerDesigner(五)-概念数据模型(CDM生成LDM,PDM和OOM)

概念数据模型 概念数据模型(Conceptual Data Model,CDM):表达的是数据整体逻辑结构,该结构独立于任何软件和数据存储结构,即它只是系统分析人员,应用程序设计人员,维护人员和用户之间相互理解的共同语言,并…

PowerDesigner(六)-物理数据模型(PDM逆向工程)

物理数据模型PDM 物理数据模型(Physical Data Model,PDM):在数据库的逻辑结构设计好之后,就需要完成其物理设计,PDM就是为实现这一目的而设计的。 物理数据模型是以常用的DBMS(数据库管理系统)理论为基础,将CDM/LDM中所建立的现实世界模型生…

PowerDesigner(八)-面向对象模型(用例图,序列图,类图,生成Java源代码及Java源代码生成类图)

面向对象模型 面向对象模型是利用UML(统一建模语言)的图形来描述系统结构的模型,它从不同角度实现系统的工作状态。这些图形有助于用户,管理人员,系统分析人员,开发人员,测试人员和其他人员之间进行信息交流。这里主要…

PowerDesigner(九)-模型文档编辑器(生成项目文档)

模型文档编辑器 PowerDesigner的模型文档(Model Report)是基于模型的,面向项目的概览文档,提供了灵活,丰富的模型文档编辑界面,实现了设计,修改和输出模型文档的全过程。 模型文档的功能如下: 为各个模型…

JNDI学习总结(一)——JNDI数据源的配置

一、数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");)②连接数据库(Connection con DriverManager.getConnection();)③操作数据库(PreparedStatement stat con.prepa…

JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源

一、C3P0下载 C3P0下载地址:http://sourceforge.net/projects/c3p0/files/?sourcenavbar 下载完成之后得到一个压缩包。 二、使用C3P0配置JNDI数据源 Tomcat6.x中配置JNDI数据源时默认使用的是Tomcat6.x自带的DBCP连接池,Tomcat6.x使用DBCP连接池配置JN…

java 消息机制 ActiveMQ入门实例

1.下载ActiveMQ 去官方网站下载: http://activemq.apache.org/我下载的时候是 ActiveMQ 5.8.0 Release版 2.运行ActiveMQ 解压缩apache-activemq-5.8.0-bin.zip,然后双击apache-activemq-5.5.1\bin\activemq.bat运行ActiveMQ程序。 启动ActiveMQ以后&…

JavaSE基础12笔记常见对象

12.01_常见对象(Scanner概述及其方法介绍) A.Scanner概述 B.Scanner构造方法原理 ​ Scanner(Inputstream source) ​ System下面有个字段 ​ public static final Inputstream in;标准输入流,对应键盘录入 C.一般方法 ​ hasNextxxx() 判断是否还有下一个输入项 ​ ne…

spring integeration主要概念

1目标和原则 SpringIntegration主要有如下两个目标: l提供一个简单的模型来实现复杂的企业集成解决方案 l为基于Spring的应用添加异步的、消息驱动的行为,让Spring用户可以直观的、增量的采用 SpringIntegration基于两个原则: l组件应该松耦合…

Spring Integration入门

为什么使用Spring Integration Spring Integration是Spring框架创建的又一个API,面向企业应用集成(EAI)。说到集成,并不缺“解决办法”:硬编码的Java客户端、其它ESB产品,还有消息队列等更加传统的应用集成…

dispatcherservlet详解

3.1、DispatcherServlet作用 DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。 具体请参考第二章的图2-1。 Dispa…
最新文章