华为笔试,第一题80%,23题AC,各位大佬帮忙看看错误

1. [编程|100分] 字符串去重及排序
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++ 32768K,其他语言 65536K
题目描述
输入一个长度不超过10位的正整数,从左向右阅读,去除重复的数字,再从右向左阅读,返回一个新的整数。

输入描述:
一个长度不超过10位的正整数
输出描述:
去重重排后的一个正整数
示例1
输入
98766730
输出
36789

执行如下代码,提示越界,没懂哪里会越界,求大佬点拨

import java.util.HashSet;
import java.util.Scanner;

public class Main {

public static void main(String [] args){
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
String number = scanner.next();
System.out.println(solve(number));
}
}

public static int solve(String number){
StringBuilder stringBuilder = new StringBuilder();
HashSet<Character> hashSet = new HashSet<Character>();
char []  chars = number.toCharArray();
for (int i = 0; i < chars.length; ++i){
if (!hashSet.contains(chars[i])){
hashSet.add(chars[i]);
stringBuilder.append(chars[i]);
}
}
return Integer.parseInt(stringBuilder.reverse().toString());
}
}

2. [编程|200分] 线性插值
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++ 32768K,其他语言 65536K
题目描述
设备输出的频偏和温度相关,每个温度对应一个频偏值。已有5组温度和对应频偏值的样本(0.1℃精度),采用简单的一阶插值方法,由已有的样本两头的温度-频偏关系,根据当前温度所在区间,计算出当前温度对应的频偏值。超出温度范围的,则输出边界温度对应的频偏值。

给定条件及样本如下:

温度范围:-40℃<=temp<=100℃

温度-频偏样本:(-150,-1000),(0,700),(40,940), (300, 3000),(650,7500)
所有输入输出均为整数

输入描述:
当前温度(0.1℃精度),如100表示10℃
输出描述:
温度对应的频偏
示例1
输入
100
输出
1300


import java.util.Scanner;

public class Two {

public static void main(String [] args){
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
int t = scanner.nextInt();
System.out.println(solve(t));
}
}

public static int solve(int t){
int x1=0,x2=0,y1=0,y2=0;
if (t < -400){
t = -400;
}
if (t > 1000){
t = 1000;
}
if (t< -170){
x1 = -170;
x2 = 0;
y1 = -1000;
y2 = 700;
}
else if (t < 0){
x1 = -170;
x2 = 0;
y1 = -1000;
y2 = 700;
}
else if (t < 40){
x1 = 0;
x2 = 40;
y1 = 700;
y2 = 940;
}
else if (t < 300){
x1 = 40;
x2 = 300;
y1 = 940;
y2 = 2500;
}
else if (t <550){
x1 = 300;
x2 = 550;
y1 = 2500;
y2 = 7500;
}
else {
x1 = 300;
x2 = 550;
y1 = 2500;
y2 = 7500;
}

return ((y2-y1)/(x2-x1))*(t-x1)+y1;
}

}


3. [编程|300分] ini文件解析
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++ 32768K,其他语言 65536K
题目描述
在项目开发过程中,经常会遇到需要读写各类配置文件的场景。ini就是一种比较场景、通用的配置文件格式,要求考生实现一个ini文件解析工具,并按照指定格式输出解析结果
输入描述:
符合ini规则的文件内容(考生不需要考虑非法输入问题),例如:
;test case
[section1]
key1 = value1
[section2]
key1 = value1
说明:
1. 以分号“;”起始部分为注释,可能独占一行注释一个段落;也可能出现在行尾,注释某一行
2. section名称已中括号包裹
3. 每个section内有1个或者多个key/value对
4. key和value以等号“=”分割,等号前后允许有空格
输出描述:
通过输入解析出所有配置,每个配置应该包含三个部分:section、key、value;要求按照如下规则输出所有字段:
输出所有解析后的配置,三个字段分别用大括号“{}”包裹,其中不同section按照section名称排序,同一section内按照key值排序(排序规则同一使用ASCII码表从小到大排列)
{section}{key}{value}
示例1
输入
;test case
[section1]
key2=value2
key1=value1
输出
{section1}{key1}{value1}
{section1}{key2}{value2}
备注:
INI文件由节、键、值组成。

[section]
参数(键=值)
name=value
注解
注解使用分号表示(;)。在分号后面的文字,直到该行结尾都全部为注解。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.TreeMap;

public class Three {

static class Section{
public Section(){}
TreeMap<String,TreeMap<String,String>> map = new TreeMap<String,TreeMap<String,String>>();
}


public static void main(String [] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String line = null;
Section section = new Section();
String sectionName = "";
while ( (line = bufferedReader.readLine())!= null){
sectionName = solve(line,section,sectionName);
}
print(section);
}

public static void print(Section section){
for (String sec : section.map.keySet()){
for (String key : section.map.get(sec).keySet()){
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("{");
stringBuilder.append(sec);
stringBuilder.append("}");
stringBuilder.append("{");
stringBuilder.append(key);
stringBuilder.append("}");
stringBuilder.append("{");
stringBuilder.append(section.map.get(sec).get(key));
stringBuilder.append("}");
System.out.println(stringBuilder.toString());
}
}
}

public static String solve(String line , Section section , String sectionName){
line = line.trim();
int index = line.indexOf(';');
if (index == 0){
return sectionName;
}
if (index != -1){
line = line.substring(0,index);
}
if (line.length()==0){
return sectionName;
}
if (line.contains("=")){
int indexEqual = line.indexOf('=');
String key = line.substring(0,indexEqual).trim();
String value = line.substring(indexEqual+1).trim();
section.map.get(sectionName).put(key,value);
}
else {
int left = line.indexOf('[');
int right = line.indexOf(']');
sectionName = line.substring(left+1,right);
section.map.put(sectionName,new TreeMap<String,String>());
}
return sectionName;
}

}






#春招#
全部评论
10位数用int溢出了
点赞 回复 分享
发布于 2018-05-04 10:18
翻转以后首字母为0要删掉
点赞 回复 分享
发布于 2018-05-03 21:17
华为还有笔试?
点赞 回复 分享
发布于 2018-05-03 23:44
第一题可以逆序处理整数,并hash存储,重复的不再计算。
点赞 回复 分享
发布于 2018-05-04 01:02

相关推荐

落叶随风呀:学校不好就放两栏,专业能力往前移, 政治面貌不是党员不如不写,籍贯湖南衡阳,或者湖南,浅尝辄止 基本信息排版不够美观,没有对齐 简历上花里胡哨的东西去掉 项目我不评价,因为我能力有限,且对mcu了解不足 但是这份简历掌握的水平,你可以海投试试,工作没问题但是工资应该不会高,因为搞mcu的小公司多
点赞 评论 收藏
分享
02-08 15:53
门头沟学院 Java
CoderEcho:让公司知道便宜没好货
点赞 评论 收藏
分享
评论
点赞
18
分享

创作者周榜

更多
牛客网
牛客企业服务