2015华为校园招聘机试题<一>
题目如下:
- 按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。
例如:输入2,8,“abc”,“123456789”,则输出为“abc00000”,“12345678“,”90000000”
思路很简单,实现也很简单,代码如下:
package org.wrh.huaweiproject;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Scanner;/** 按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。* 例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”* */
public class TopicOne {public static void main(String[] args) {Scanner sc=new Scanner(System.in);/** m代表要输入的字符串个数* */System.out.println("请输入要输入字符串的个数:");int m=sc.nextInt();/** n代表输出的每个字符串的长度* */System.out.println("请输入将上面输入的每个字符串输出的个数为:");int n=sc.nextInt();/** 读取从控制台输入的字符串* */System.out.println("请输入"+m+"个字符串,用空格分开");BufferedReader br=new BufferedReader(new InputStreamReader(System.in));String str=null;try {str = br.readLine();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}/** 将从控制台读入的数据根据空格分开* */String[] strArray=str.split("\\s+");System.out.println(Arrays.toString(strArray));splitStringPrint(strArray,n); }/** 完成将字符串按照要求输出* */private static void splitStringPrint(String[] string,int len) {// TODO Auto-generated method stubfor(String str:string){while(str.length()>len){System.out.println(str.substring(0, len));str=str.substring(len, str.length());}//对于长度小于len的将补零int stringLength=str.length();if(stringLength>0&&stringLength<=len){for(int i=0;i<len-stringLength;i++){str+="0";}System.out.println(str);}}}}
- 1
上面的代码的注释写的比较详细,也比较简单,相信比较好理解
注意:我们平时写代码大多是按照上面来写,有提示输入等等这样的好习惯,但是当我们在机试中的时候,是不允许这样的,因为在机试的过程中,机器是只要我们的结果的,只有你的结果满足他设置的形式,才能正确提交的。因此这是我们需要注意的,特别是从来没有参加过机试的人应特别引起注意。
下面的代码就是没有提示输入和一些调试bug的输出等提示的代码,如下:
package org.wrh.huaweiproject;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Scanner;/** 按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。* 例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”* */
public class TopicOneDemo {public static void main(String[] args) {/** m代表要输入的字符串个数* */int m;/** n代表输出的每个字符串的长度* */int n;/** 读取从控制台输入的字符串* */BufferedReader br=new BufferedReader(new InputStreamReader(System.in));String str=null;try {str = br.readLine();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}/** 将从控制台读入的数据根据逗号分开* */String[] strArrayTemp=str.split(",");//数组中的第一个元素就是我们的m值m=Integer.valueOf(strArrayTemp[0]);//数组中的第二个元素就是我们的n值n=Integer.valueOf(strArrayTemp[1]);/** 将我们输入的字符串数据提取出来,换到另外一个数组中* */String strArray[]=new String[m];for(int i=0;i<m;i++){strArray[i]=strArrayTemp[2+i];}splitStringPrint(strArray,n); }/** 完成将字符串按照要求输出* */private static void splitStringPrint(String[] string,int len) {// TODO Auto-generated method stubfor(String str:string){while(str.length()>len){System.out.print(str.substring(0, len)+" ");str=str.substring(len, str.length());}//对于长度小于len的将补零int stringLength=str.length();if(stringLength>0&&stringLength<=len){for(int i=0;i<len-stringLength;i++){str+="0";}System.out.print(str+" ");}}}}
- 1
如有不正确的或者是有更好的方法来实现,欢迎大家批评指正。其余的几题会陆续和大家分享
修正:感谢Silencer9527这位朋友在评论区提出的好问题,问题的答案已在评论区给出,该朋友的问题如下:
-如果m=4;n=4
字符串输入 abc 是应该输出abc?还是应该输出 abc0 ,0000,0000,0000这样的结果呢?
程序中确实没有考虑这种情况,为了能让更多的人看到原程序的问题,因此之前博客中写的内容我就不改动,我就在下面重新贴上修正后的代码,程序修正后的代码如下:
package org.wrh.huaweiproject;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Scanner;/** 按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。* 例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”* */
public class TopicOneDemo01 {public static void main(String[] args) {/** m代表要输入的字符串个数* */int m;/** n代表输出的每个字符串的长度* */int n;String[] strArrayTemp=input();//数组中的第一个元素就是我们的m值m=Integer.valueOf(strArrayTemp[0]);//数组中的第二个元素就是我们的n值n=Integer.valueOf(strArrayTemp[1]);/** 将我们输入的字符串数据提取出来,换到另外一个数组中* 这里要注意的是要把这样的情况考虑进去,当我们输入:4,4,abc这样的情况(即我们实际输入的字符串的个数比我们想要输入的字符串的个数要少)* */String strArray[]=new String[m];/** 将输入的字符串换到另外一个数组中* */for(int i=0;i<strArrayTemp.length-2;i++){strArray[i]=strArrayTemp[2+i]; }if((strArrayTemp.length-2)<m){//若我们实际输入的字符串的个数比我们想要输入的字符串的个数要少,则用""空字符串来填for(int i=strArrayTemp.length-2;i<m;i++){strArray[i]=""; }}splitStringPrint(strArray,n,m); }/** 函数功能:读取从控制台输入的字符串* */private static String[] input() {BufferedReader br=new BufferedReader(new InputStreamReader(System.in));String str=null;try {str = br.readLine();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}/** while循环保证输入是符合要求的,即保证m和n值是数字且实际输入的字符串的个数要小于等于要求输入的个数(即不允许出现输入:2,3,abc,asdf,asdfgh这种情况发生)* */while(true){/** 将从控制台读入的数据根据逗号分开* */String[] strArrayTemp=str.split(",");if(strArrayTemp[0].matches("\\d+")&&strArrayTemp[1].matches("\\d+")&&(strArrayTemp.length<=Integer.valueOf(strArrayTemp[0]))){return strArrayTemp;}else{try {System.out.println("请重新输入:");str=br.readLine();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}/** 完成将字符串按照要求输出* */private static void splitStringPrint(String[] string,int len,int m) {// TODO Auto-generated method stubfor(int i=0;i<m;i++){while(string[i].length()>len){System.out.print(string[i].substring(0, len)+" ");string[i]=string[i].substring(len, string[i].length());}//对于长度小于len的将补零int stringLength=string[i].length();if(stringLength>=0&&stringLength<=len){for(int j=0;j<len-stringLength;j++){string[i]+="0";}System.out.print(string[i]+" ");}}}}
- 1
说明:以上的程序中的某个功能可以用数组的某些函数来填充,例如下面的这个用空字符串来填充完全可以用Arrays.fill(一些参数)来替换,但是当我们在机试的过程中可能不能够想到这个函数,因此程序中也就没有这样做。
if((strArrayTemp.length-2)<m){//若我们实际输入的字符串的个数比我们想要输入的字符串的个数要少,则用""空字符串来填for(int i=strArrayTemp.length-2;i<m;i++){strArray[i]=""; }
- 1
2015华为校园招聘机试题<一>相关推荐
- 2015华为校园招聘机试题一
2015华为校园招聘机试题<一> 今天无意之间看到了2015年华为校园招聘的机试题,于是,做了下,写出来与大家共享.先看第一题: 题目如下: 按要求分解字符串,输入两个数M,N:M代表输入 ...
- 2014届华为校园招聘机试题
华为2014校园招聘的机试题目和2013年的完全一样. 一.题目描述(60分): 通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的 ...
- 2015华为实习生招聘机试题长沙站
5月21日中午接到了华为实习生招聘机试的短信通知,早上8:50要赶去湖南大学,虽然并不远,但还是很累有木有.差一点就不想去了,还好后来抱着学习的态度还是过去了.到了湖大信息院之后很快搞清楚了状况,原来 ...
- 2015届华为校园招聘机试题
第一题(60分): 按要求分解字符串,输入两个数M,N:M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0.例如:输入2,8, "abc" ," ...
- 2015届华为校园招聘机试题 C语言实现
转载自:原文地址:http://blog.csdn.net/hackbuteer1/article/details/39253767 第一题(60分): 按要求分解字符串,输入两个数M, ...
- 华为机试题2014 java_2014届华为校园招聘机试题(java实现)
首先要感谢, 博主Hackbuteer1.提供的关于2014年的华为面试题目.这里运行环境是windows7,eclipse.jdk为1.8.0_45.好了直接上题目.代码,及分析. 一.题目描述(6 ...
- 2013届华为校园招聘机试题
笔试题目(机试,共两题) 题目一:子串分离 题目描述: 通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔.请编写一个程序,自动分离出各个子串,并使用','将其分隔,并且 ...
- 2012届华为校园招聘机试题
1.选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与 score[] 数组对应的评委类别,judge_type[i] == 1,表 ...
- 2014届华为校园招聘机试题2
第一题.输入一个正整数,并编码为字符串进行输出 描述: 1.输入一个正整数,并编码为字符串进行输出. 编码规则为:数字0-9分别编码为字符a-j 2.输入肯定是正整数,不用做错误较验 运行时间限制: ...
最新文章
- iOS之NSString类中compare方法的陷阱
- android圆形菜单
- 关于Ubuntu运行级别、开机启动脚本的说明
- 存储过程使用事物的几种方式 转载自--http://www.cnblogs.com/chengxiaoming/archive/2010/06/11/1756163.html...
- python修改第三方库重写_Python安装第三方库,切换镜像源
- C++STL的string容器
- IIC原理及简单流程
- “约见”面试官系列之常见面试题之第六十四篇之call和apply区别(建议收藏)
- db2存储结构换Oracle,DB2中实现Oracle的功能
- 电子学会2022年3月份编程等级考试(scratch、pyhton)
- heroku_如何通过5个步骤在Heroku上部署机器学习UI
- SpringBoot项目进行单元测试
- vb将excel数据导入mysql_用VB做怎么将Excel数据导入SQL数据库中
- OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x000001faf3e50000
- windown+cpu+Keras/Tensorflow+python+yolo3训练自己的数据集
- e盘是否具有读写权限_文件权限管理
- 【那些年踩过的坑】服务器配环境:Ubuntu 16.04 + Titan Xp + CUDA 9.0 + cuDNN 7.1 + Tensorflow + Pytorch + MXNet
- mybatis-plus和mysql
- mysql telnet无法打开主机连接_求助:不能打开主机连接,在端口 3306: 连接失败...
- 副业项目做什么比较靠谱,如何知道自己适合做什么?