华为OD算法牛客

487 阅读4分钟

1 描述

   计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)

1.1 输入描述:

   输入一行,代表要计算的字符串,非空,长度小于5000。

1.2 输出描述:

   输出一个整数,表示输入字符串最后一个单词的长度。

1.3 示例1

输入:
hello nowcoder
输出:
8

说明:
最后一个单词为nowcoder,长度为8  

1.4 代码演示

package com.manage.web.controller;

import java.util.Scanner;

public class Main1 {
    public static void main(String[] args) {
        Main1 main1Class = new Main1();
        main1Class.stringLenCount();
    }

    /*
     * 计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。
     * (注:字符串末尾不以空格为结尾)
     * hasNextLine將空格當作字符串的一部分进行计算,使用hasNextLine接收字符串的话会将其当作整体处理
     * hasNext将空格当作切割符号处理,将完整字符串切割为子字符串,空格不计数
     * hasNextLine和nextLine结合使用,hasNext和next结合使用
     * */
    public void stringLenCount() {
        Scanner input = new Scanner(System.in);
        while(input.hasNext()){
            String item = "";
            item = input.nextLine();
            System.out.println("item="+item);
            System.out.println("indexod="+item.lastIndexOf(" "));
            System.out.println("最后一个长度:"+item.length());
            // 计算长度,字符串总长度减去最后一个空格出现位置
            System.out.println(item.length() -1 -item.lastIndexOf(" "));
        }
    }

}

2 描述

   写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)

数据范围: 1≤n≤1000 

2.1 输入描述:

   第一行输入一个由字母和数字以及空格组成的字符串,第二行输入一个字符。

2.2 输出描述:

输出输入字符串中含有该字符的个数。(不区分大小写字母)

2.3 示例1

输入:
ABCabc
A
输出:
2

2.4 代码实例

package com.manage.web.controller;

import java.util.Scanner;

public class Main1 {
    /**
     把他们统一转成小写,然后在判断字符出现的次数
     */
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        //完整的字符串
        String str1 = scan.nextLine().toLowerCase();
        //单个字符
        String str2 = scan.nextLine().toLowerCase();
        //出现的次数 = 完整字符串的长度-单个字符串的长度
        int num = str1.length() - str1.replaceAll(str2,"").length();
        System.out.println(num);

    }

}

3 描述

   明明生成了N个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。

数据范围: 1≤n≤1000  ,输入的数字大小满足 1≤val≤500 

3.1 输入描述:

   第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数。 具体格式可以参考下面的"示例"。

3.2 输出描述:

   输出多行,表示输入数据处理后的结果

3.3 示例1

输入:
3
2
2
1
输出:
1
2
说明:
输入解释:
第一个数字是3,也即这个小样例的N=3,说明用计算机生成了3个1到500之
间的随机整数,接下来每行一个随机数字,共3行,也即这3个随机数字为:
2
2
1
所以样例的输出为:
1
2  

3.4 代码示例

package com.manage.web.controller;

import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;

public class Main1 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        TreeSet<Integer> ts = new TreeSet<>();
        for(int i = 0; i < n; i++) {
            ts.add(scan.nextInt());
        }
        System.out.println(ts.size());
        Iterator<Integer> it = ts.iterator();
        while(it.hasNext()) {
            System.out.print(it.next());
            if(it.hasNext()) System.out.print(" ");
        }
    }

}

4 描述

  • 输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;
  • 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

4.1 输入描述:

   连续输入字符串(每个字符串长度小于等于100)\

4.2 输出描述:

   依次输出所有分割后的长度为8的新字符串\

4.3 示例1

输入:
abc
输出:
abc00000

4.4 代码示例

package com.manage.web.controller;

import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;

public class Main1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()){
            String str = sc.nextLine();
            //循环截取长度为8的字符串substring两种用法
            while(str.length()>8){
                System.out.println(str.substring(0, 8));
                str = str.substring(8);
            }
            if(str.length() == 8){
                System.out.println(str);
            }else if(str.length() < 8){
                //长度小于8,补0
                StringBuilder sb = new StringBuilder(str);
                while (sb.length()<8){
                    sb.append("0");
                }
                System.out.println(sb);
            }
        }
    }

}

5 描述

写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。

数据范围:保证结果在 1≤n≤2^31−1 

5.1 输入描述:

输入一个十六进制的数值字符串。

5.2 输出描述:

输出该数值的十进制字符串。不同组的测试用例用\n隔开。

5.3 示例1

输入:
0xAA
输出:
170

5.4 代码示例

package com.manage.web.controller;

import java.util.Scanner;

public class Main1 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String str = sc.nextLine();
            String num = str.substring(2,str.length());
            int result = 0;
            int power = 1;
            for(int i = num.length() - 1; i >= 0; i--){
                char c = num.charAt(i);
                if(c >= '0' && c <= '9'){
                    result += (c - '0') * power;
                }else if (c >= 'A' && c <= 'F'){
                    result += (c - 'A' + 10) * power;
                }
                power *= 16;
            }
            System.out.println(result);
        }
        sc.close();
    }

}

6 描述

功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )

数据范围: 1≤n≤2×10^9+14 

6.1 输入描述:

输入一个整数

6.2 输出描述:

按照从小到大的顺序输出它的所有质数的因子,以空格隔开。

6.3 示例1

输入:
180
输出:
2 2 3 3 5

6.4 代码示例

import java.util.*;
public class Main{
    public static void main(String[] args) {
        // 处理输入
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            // 获取需要求解的值
            int target = sc.nextInt();
            int y = 2;// 因子从2开始算
            while(target != 1){ // 短除法,除到目标值为1为止
                if(target % y == 0) // 能能够整除2
                {
                    System.out.print(y+" ");
                    target /= y;
                }else{// 更新y的值
                    if(y > target / y) y = target;
                    else y++;
                }
            }
        }
    }
}

7 描述

数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。

提示:

0 <= index <= 11111111

1 <= value <= 100000

7.1 输入描述:

先输入键值对的个数n(1 <= n <= 500) 接下来n行每行输入成对的index和value值,以空格隔开

7.2 输出描述:

输出合并后的键值对(多行)

7.3 示例1

输入:
4
0 1
0 2
1 2
3 4
输出:
0 3
1 2
3 4

输入:
3
0 1
0 2
8 9
输出:
0 3
8 9

7.4 代码示例

package com.manage.web.controller;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main1 {
    public static void main(String agv[]) {
        Scanner scanner = new Scanner(System.in);
        int tableSize = scanner.nextInt();
        Map<Integer, Integer> table = new HashMap<>(tableSize);
        for (int i = 0; i < tableSize; i++) {
            int key = scanner.nextInt();
            int value = scanner.nextInt();
            if (table.containsKey(key)) {
                table.put(key, table.get(key) + value);
            } else {
                table.put(key, value);
            }
        }
        for (Integer key : table.keySet()) {
            System.out.println( key + " " + table.get(key));
        }
    }

}

8 描述

输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。 保证输入的整数最后一位不是 0 。

数据范围: 1≤n≤108 

8.1 输入描述:

输入一个int型整数

8.2 输出描述:

按照从右向左的阅读顺序,返回一个不含重复数字的新的整数

8.3 示例1

输入:
9876673
输出:
37689

8.4 代码示例

package com.manage.web.controller;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Scanner;

public class Main1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            // 使用HashSet来判断是否是不重复的
            HashSet<Integer> hs = new HashSet<>();
            int target = sc.nextInt();// 获取代求解的值
            while(target != 0){ // 求解每位上面的整数
                int temp = target % 10;
                if(hs.add(temp)) // 如果能加入,就是说明没有重复
                    System.out.print(temp);
                target /= 10;// 除10能去掉最右边的数字
            }
            System.out.println();
        }
    }

}

9 描述

编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次

例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。

数据范围: 1≤n≤500 

9.1 输入描述:

输入一行没有空格的字符串。

9.2 输出描述:

输出 输入字符串 中范围在(0~127,包括0和127)字符的种数。

9.3 示例1

输入:
abc
输出:
3

输入:
aaa
输出:
1

9.4 代码示例

package com.manage.web.controller;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Scanner;

public class Main1 {
    public static void main(String[] args) throws Exception{
        Scanner sc = new Scanner(System.in);
        while(sc.hasNextLine()){
            String s = sc.nextLine();
            char[] cc = s.toCharArray();
            int count = 0;
            HashSet<Character> set = new HashSet<>();
            for(int i = 0; i < cc.length; ++i){
                if(cc[i] >= 0 && cc[i] <= 127){
                    set.add(cc[i]);                      
                }
            }
            System.out.println(set.size());
        }
    }
}