华为机试题,快来围观

一、题目一

1. 题目描述

从输入任意个整型数,统计其中的负数个数并求所有非负数的平均值,结果保留一位小数,如果没有非负数,则平均值为0
本题有多组输入数据,输入到文件末尾,请使用while(cin>>)读入

输入描述:

输入任意个整数

输出描述:

输出负数个数以及所有非负数的平均值

输入
-13
-4
-7
输出
3
0.0

答案:

import java.math.BigDecimal;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()){
            String s = scanner.nextLine();
            statistical(s);
        }
    }

    private static void statistical(String s){
        String[] split = s.split(" ");
        //正数和
        int count = 0;
        //负数个数
        int num = 0;
        //个数
        int length = split.length;
        for (int i = 0; i < length; i++) {
            int integer = Integer.valueOf(split[i]);
            if(integer >= 0){
                count += integer;
            }else {
                num++;
            }
        }
        System.out.println(num);
        System.out.println(new BigDecimal((double) count/(length-num)).setScale(1,BigDecimal.ROUND_HALF_UP).doubleValue());
    }
}

二、题目二

题目描述

连续输入字符串(输出次数为N,字符串长度小于100),请按长度为8拆分每个字符串后输出到新的字符串数组,

长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

首先输入一个整数,为要输入的字符串个数。
例如:

输入:

2

abc

12345789

输出:

abc00000

12345678

90000000

答案:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()){
            int anInt = scanner.nextInt();
            List<String> strs = new ArrayList<>();
            for (int i = 0; i <= anInt ; i++) {
                String s = scanner.nextLine();
                if(null !=s && !"".equals(s)){
                    strs.add(s);
                }
            }
            handle(strs);
        }
    }

    private static void handle(List<String> toBeHandle){
        toBeHandle.stream().forEach(s -> {
            int length = s.length();
            int a =  length /8;
            int b = 8 - length % 8;
            String str = "";
            for (int i = 0; i <= a; i++) {
                if(i == a){
                    str = s.substring(8*i);
                    for (int j = 0; j < b && b != 8; j++) {
                        str += 0;
                    }
                    System.out.println(str);
                }else {
                    str = s.substring(i * 8, (i + 1) * 8);
                    System.out.println(str);
                }
            }

        });
    }

三、题目三

题目描述

Redraiment是走梅花桩的高手。Redraiment总是起点不限,从前到后,往高的桩子走,但走的步数最多,不知道为什么?你能替Redraiment研究他最多走的步数吗?

样例输入

6

2 5 1 5 4 5

样例输出

3

提示

Example:

  1. 6个点的高度各为 2 5 1 5 4 5
  2. 如从第1格开始走,最多为3步, 2 4 5
  3. 从第2格开始走,最多只有1步,5
  4. 而从第3格开始走最多有3步,1 4 5
  5. 从第5格开始走最多有2步,4 5

所以这个结果是3。

答案:

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
        String input;
        while ((input = read.readLine())!=null){
            int num = Integer.parseInt(input);
            String[] strs = read.readLine().split(" ");
            int[] nums = new int[num];
            int max = 0;
            for(int i=0;i<strs.length;i++){
                nums[i] = Integer.parseInt(strs[i]);
            }
            int[] result = new int[num];
            for(int i =0; i<nums.length;i++){
                result[i]=1;
                for(int j = 0;j<i;j++){
                    //如果nums[j]
                    if(nums[j]<nums[i]){
                        result[i]=Math.max(result[i],result[j]+1);
                    }
                }
            }
            max = 1;
            for(int i=0;i<result.length;i++){
                if(result[i]>max){
                    max=result[i];
                }
            }
            System.out.println(max);
        }
    }
}

你可能感兴趣的:(面试题)