华为OD机试真题【数字涂色】

一、题目描述

疫情过后希望小学终于又重新开学了 3年2班开学第一天的任务是 将后面的黑板报重新制作 黑板上已经写上了N个正整数 同学们需要给这每个数分别上一种颜色 为了让黑板报既美观又有学习意义 老师要求同种颜色的所有数都可以被这个颜色中最小的那个数整除 现在帮小朋友们算算最少需要多少种颜色,给这N个数进行上色

二、输入输出

1.输入描述

第一行有一个正整数N 其中 1 <= n <=100 第二行有N个int型数,保证输入数据在[1,100]范围中 表示黑板上各个正整数的值

2.输出描述

输出只有一个整数,为最少需要的颜色种数

3.示例

输入示例1

3 2 4 6

输出示例1

1 说明: 所有数都能被2整除

输入示例2

4 2 3 4 9

输出示例2

2 说明: 2与4涂一种颜色,4能被2整除 3与9涂另一种颜色,9能被3整除 不能涂同一种颜色

三、代码实现Java

public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            String s = in.nextLine();
            String str = in.nextLine();

            String[] split = str.split(" ");
            List<Integer> numList = Arrays.stream(split).map(Integer::parseInt).sorted().collect(Collectors.toList());

            int result = 0;
            result = getNewList(numList, result);
            System.out.println(result);
        }
    }

    private static int getNewList(List<Integer> numList, int result) {
        if (numList.size() == 0) {
            return result;
        }
        List<Integer> newList = new ArrayList<>();
        for (int i = 1; i < numList.size(); i++) {

            Integer integer = numList.get(0);
            Integer integer1 = numList.get(i);
            if (integer1 % integer != 0) {
                newList.add(integer1);
            }
        }
        result++;

        return getNewList(newList, result);
    }
经验分享 程序员 微信小程序 职场和发展