华为Oj题(01-10)

题目1:

 1 import java.util.Scanner;
 2 
 3 /**
 4  * Created by huststl on 2018/3/11 22:16
 5  * 计算字符串最后一个单词的长度,单词以空格隔开。
 6  */
 7 public class demo01 {
 8     public static void main(String[] args) {
 9         Scanner scanner = new Scanner(System.in);
10 
11         //是否还有其他行,一次可以测试多行
12         while(scanner.hasNext()){
13             String input = scanner.nextLine();
14             System.out.println(findLastLength(input));
15         }
16         scanner.close();
17     }
18 
19     public static int findLastLength(String input) {
20         //最后一个字母的位置
21         int last = input.length()-1;
22         //找最后一个字母出现的位置
23         while (last>=0 && input.charAt(last)==' '){
24             last--;
25         }
26         //找到最后一个字母之前的第一个空白字符
27         int pos = last-1;
28         while (pos>=0&&input.charAt(pos)!=' '){
29             pos--;
30         }
31 
32         return last-pos;
33     }
34 }

题2

 1 import java.util.Scanner;
 2 
 3 /**
 4  * Created by huststl on 2018/3/11 22:38
 5  * 写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,
 6  * 然后输出输入字符串中含有该字符的个数。不区分大小写。
 7  */
 8 public class demo02 {
 9     public static void main(String[] args) {
10         Scanner scanner = new Scanner(System.in);
11 
12         while(scanner.hasNext()){
13             String str = scanner.next();
14             String ch = scanner.next();
15             System.out.println(countCharNumber(str,ch));
16 
17         }
18     }
19 
20     private static int  countCharNumber(String str, String chStr) {
21         char ch = 0;
22         for(int i=0;i<chStr.length();i++){
23             if(chStr.charAt(i)!=' '){
24                 ch = chStr.charAt(i);
25                 break;
26             }
27         }
28 
29         ch = toUppercase(ch);
30         int count = 0;
31         for(int i=0;i<str.length();i++){
32             if(toUppercase(str.charAt(i))==ch){
33                 count++;
34             }
35         }
36         return count;
37 
38     }
39 
40     private static char toUppercase(char ch) {
41         if(ch>='a'&& ch<='z'){
42             return (char)('A'+(ch-'a'));
43         }
44         return ch;
45     }
46 
47 }

题3

 1 import java.util.Scanner;
 2 import java.util.Set;
 3 import java.util.TreeSet;
 4 
 5 /**
 6  * Created by huststl on 2018/3/12 8:35
 7  * 输入多行数字,进行去重和排序
 8  */
 9 public class demo03 {
10     public static void main(String[] args) {
11         Scanner scanner = new Scanner(System.in);
12 
13         while (scanner.hasNext()){
14             //读取输入的数字数
15             int num = scanner.nextInt();
16             //存放输入的数字
17             Set<Integer> set = new TreeSet<>();
18             while ((--num)>=0){
19                 set.add(scanner.nextInt());
20             }
21             System.out.println(setToString(set));
22         }
23 
24     }
25 
26     private static String setToString(Set<Integer> set)
27     {
28         StringBuilder builder = new StringBuilder(128);
29         for(Integer i:set){
30             builder.append(i).append("\n");
31         }
32         return builder.toString();
33     }
34 }

题4:

 1 import java.util.Scanner;
 2 
 3 /**
 4  * Created by huststl on 2018/3/12 8:45
 5  * 连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
 6  •长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
 7  */
 8 public class demo04 {
 9     public static void main(String[] args) {
10         Scanner sc= new Scanner(System.in);
11         /*StringBuilder builder = new StringBuilder(256);
12         while (scanner.hasNext()){
13             builder.setLength(0);
14             String input = scanner.nextLine();
15             stringSplit(builder,input);
16             input = scanner.nextLine();
17             stringSplit(builder,input);
18             System.out.println(builder);
19         }*/
20         while (sc.hasNext()){
21             String str = new String(sc.nextLine());
22             if(str.length()%8!=0){
23                 str = str +"00000000";
24 
25             }
26             while (str.length()>8){
27                 System.out.println(str.substring(0,8));
28                 str = str.substring(8);
29 
30             }
31         }
32 
33     }
34 
35     /*private static void stringSplit(StringBuilder builder, String str) {
36         if(str == null || str.length()<1){
37             return;
38         }
39         int pos = 0;
40         while((pos+8)<str.length()){
41             builder.append(str.substring(pos-8,pos)).append("\n");
42         }
43 
44         //如果str.length()<pos 说明最后字符不足8个或刚好8个
45         if(str.length()<=pos){
46             builder.append(str.substring(pos-8,str.length()));
47             for(int i=str.length();i<pos;i++){
48                 builder.append(0);
49             }
50             builder.append("\n");
51         }
52     }*/
53 }

题5:

 1 import java.util.Scanner;
 2 
 3 /**
 4  * Created by huststl on 2018/3/12 9:21
 5  * 进制转换(输入16进制输出10进制)
 6  */
 7 public class demo05 {
 8     public static void main(String[] args) {
 9         Scanner sc = new Scanner(System.in);
10         while (sc.hasNext()){//多个测试用例用while(sc.hasNext()){}
11             String str = sc.next().substring(2);
12             System.out.println(Integer.parseInt(str,16));
13             /*System.out.println(hexToDec(str));*/
14         }
15     }
16 
17    /* private static int hexToDec(String str) {
18         final int BASE = 16;
19         int result = 0;
20 
21         for(int i=2;i<str.length();i++){
22             result = result * BASE + hexToNum(str.charAt(i));
23         }
24         return result;
25     }*/
26 
27     /*private static int hexToNum(char c) {
28 
29         if(c >='0' && c<='9'){
30             return c-'0';
31         }else if(c>='a'&& c<='z'){
32             return c -'a'+10;
33         }else {
34             return c-'A'+10;
35         }
36     }*/
37 }

题6:

 1 import java.util.Scanner;
 2 
 3 /**
 4  * Created by huststl on 2018/3/12 9:34
 5  * 质子因子
 6  * :输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )
 7  */
 8 public class demo06 {
 9     public static void main(String[] args) {
10 
11         Scanner sc = new Scanner(System.in);
12 
13         while (sc.hasNext()){
14             long num = sc.nextLong();
15             System.out.println(findPrime(num));
16         }
17 
18     }
19 
20     private static String findPrime(long num) {
21 
22         StringBuilder builder = new StringBuilder(128);
23 
24         long i = 2;
25 
26         while (i<=num){
27             //每次的i一定是质数才会满足
28             while (num%i==0){
29                 builder.append(i).append(' ');
30                 num /=i;
31             }
32             i++;
33         }
34         return builder.toString();
35     }
36 }

题7:

 1 import java.util.Scanner;
 2 
 3 /**
 4  * Created by huststl on 2018/3/12 9:46
 5  * 取近似值
 6  * 写出一个程序,接受一个浮点数值,输出该数值的近似整数值。
 7  * 如果小数点后数值大于等于5,向上取整;小于5,则向下取整。
 8  */
 9 public class demo007 {
10     public static void main(String[] args) {
11         Scanner sc = new Scanner(System.in);
12 
13         while (sc.hasNext()){
14             float num = sc.nextFloat();
15             System.out.println(floatToNearInt(num));
16         }
17     }
18 
19     private static int floatToNearInt(float num) {
20         //取整的计算方式
21         return (int) ((num*10+5)/10);
22     }
23 }

题8:

 1 import java.util.Scanner;
 2 import java.util.SortedMap;
 3 import java.util.TreeMap;
 4 
 5 /**
 6  * Created by huststl on 2018/3/12 9:52
 7  * 数据表记录包含表索引和数值,请对表索引相同的记录进行合并,
 8  * 即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
 9  */
10 public class demo008 {
11     public static void main(String[] args) {
12         Scanner scan =new Scanner(System.in);
13 
14         while (scan.hasNext()){
15             int pares = Integer.parseInt(scan.nextLine());
16             SortedMap<Integer,Integer> map = new TreeMap<>();
17             for(int i=0;i<pares;i++){
18                 String[] nums = scan.nextLine().split("\\s+");
19                 addPare(map,nums);
20             }
21             System.out.println(mapToString(map));
22         }
23     }
24 
25     private static String mapToString(SortedMap<?, ?> map) {
26         StringBuilder builder = new StringBuilder();
27 
28         for(SortedMap.Entry<?,?> e:map.entrySet()){
29             builder.append(e.getKey()).append(" ").append(e.getValue()
30             ).append("\n");
31         }
32 
33         return builder.toString();
34     }
35 
36 
37     private static void addPare(SortedMap<Integer, Integer> map, String[] nums) {
38 
39         int key = Integer.parseInt(nums[0]);
40         int val = Integer.parseInt(nums[1]);
41 
42         if(map.containsKey(key)){
43             map.put(key,map.get(key)+val);
44         }else {
45             map.put(key,val);
46         }
47     }
48 }

题9:

 1 import java.util.HashSet;
 2 import java.util.LinkedHashSet;
 3 import java.util.Scanner;
 4 
 5 /**
 6  * Created by huststl on 2018/3/12 10:10
 7  * 提取不重复的整数
 8  * 输入一个int型整数,
 9  * 按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
10  */
11 public class demo009 {
12     public static void main(String[] args) {
13         Scanner scanner = new Scanner(System.in);
14 
15         while (scanner.hasNext()){
16             /*int num = scanner.nextInt();
17             System.out.println(extractNumber(num+""));*/
18             String str = scanner.nextLine();
19 
20             int len = str.length();
21 
22             int[] arr1 = new int[10];
23 
24             for(int i=len-1;i>=0;i--){
25                 if(arr1[str.charAt(i)-48]==0){
26                     System.out.println(str.charAt(i)-48);
27                     //字符与整数之间差48
28                     arr1[str.charAt(i)-48]++;
29                 }
30             }
31 
32         }
33 
34     }
35 
36     /*private static String extractNumber(String s) {
37 
38         StringBuilder builder = new StringBuilder();
39 
40         HashSet<Character> set = new LinkedHashSet<>();
41         for(int i=s.length()-1;i>=0;i++){
42             set.add(s.charAt(i));
43         }
44         for(Character c:set){
45             builder.append(c);
46         }
47 
48         //如果第一个字符是0
49         if(builder.charAt(0)=='0'){
50             return builder.substring(1,builder.length());
51         }
52 
53         return builder.toString();
54     }*/
55 }

题10:

 1 import java.util.Scanner;
 2 
 3 /**
 4  * Created by huststl on 2018/3/12 10:30
 5  * 010--字符个数统计
 6  * 编写一个函数,计算字符串中含有的不同字符的个数。
 7  * 字符在ACSII码范围内(0~127)。不在范围内的不作统计。
 8  */
 9 public class demo10 {
10     public static void main(String[] args) {
11         Scanner scanner = new Scanner(System.in);
12         while (scanner.hasNext()){
13             int[] arr = new int[128];
14             String str = scanner.nextLine();
15             countChar(arr,str);
16             System.out.println(countCharNum(arr));
17         }
18     }
19 
20     private static int countCharNum(int[] arr) {
21         int result = 0;
22         for(int i:arr){
23             if(i!=0){
24                 result++;
25             }
26         }
27         return result;
28     }
29 
30     private static void countChar(int[] arr, String str) {
31         for(int i=0;i<str.length();i++){
32             char c = str.charAt(i);
33             if(c<=127){
34                 arr[c]++;
35             }
36         }
37     }
38 }

 

posted @ 2018-03-12 10:57  huster-stl  阅读(613)  评论(0编辑  收藏  举报