华为机试题目1-10题

第三题:明明的随机数问题,根据题意是将输入的数据进行去重和排序,明显是用TreeSet。

第五题:进制转换问题。本来打算一点一点写一个map,进行转换,发现太过麻烦,上网查后,发现有两个方法可以直接转换。

字符串s="0xA",十进制是10;

方法一:Integer.decode(s);即可为10;

decode可以自己分析字符串从而输出对应的10进制,

如:

8进:010=>分析后为 8

10进:10=>分析后为 10

16进:#10|0X10|0x10=>分析后是 16

方法二:

ss=s.substring(2);

Integer.parseInt(ss,16);也可以得到10,第一行代码是将0x去掉,第二行代码parseInt第二个参数16,是说明这个ss字符串代表的是一个16进制的数,返回10进制。

parseInt是解析一个string表示的数的方法,即给一个X进制的数,返回它的十进制表示,比如parseInt("Kona", 27) ;返回结果为411787。

第六题:质数因子。自己写的办法最后一组一直超时,是因为判断一个数是不是质数的时候一直从小到大判断。而实际上我们判断数 num 是不是质数时,没必要从 2 一直尝试到 num 一样,

此题中的大循环也大可不必写一个到 num 的循环,写到根号num即可,如果此时数字还没有除数,则可判定其本身是一个质数,没有再除下去的必要了。还有一个简单的方法如下:

华为机试题目1-10题

 

可以看出代码中只要是因子就直接输出了,原话中有人回复是这样的:(注意,num一直在变小,这就暗含了一个现象或者说理论吧,就是从小到大试:如果一个数已经不能整除2了,

那么这个数肯定不能整除2的倍数;同理3也一样,所以整个循环能够保证一旦出现新的因数,其一定就是质数)

第八题:合并表记录,因为输出按照key升序输出,不难想到用TreeMap,但是主要是不知道怎么遍历,以及一个关键的函数getOrDefault(key,defaultValue);这个函数当Map集合中有这个key时,就使用这个key值;
如果没有就使用默认值defaultValue。

至于遍历问题,用foreach遍历,代码如下:

华为机试题目1-10题

 

 第九题:输出不重复的整数。我刚开始用的是hashset,但是发现输出的顺序不是插入的顺序,上网查了下资料发现输出的顺序是随机的,要想维护插入顺序,需要用LinkedHashSet.

 

上一篇:C++全局变量


下一篇:JavaScript中WebAPI知识