目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Java算法源码
- 六、效果展示
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
疫情过后,希望小学终于又重新开学了,三年二班开学第一天的任务是将后面的黑板报重新制作。
黑板上已经写上了N个正整数,同学们需要给这每个数分别上一种颜色。
为了让黑板报既美观又有学习意义,老师要求同种颜色的所有数都可以被这种颜色中最小的那个数整除。
现在请你帮帮小朋友们,算算最少需要多少种颜色才能给这N个数进行上色。
二、输入描述
第一行有一个正整数N,其中。
第二行有N个int型数(保证输入数据在[1,100]范围中),表示黑板上各个正整数的值。
7
58 14 20 67 41 4 63
三、输出描述
输出只有一个整数,为最少需要的颜色种数。
6
因为7个数中只有20能被4整除,所以20和4一个颜色,其它的都是不同颜色。
四、解题思路
- 读取输入的正整数个数 N;
- 读取输入的正整数数组 orgStrArr;
- 将 orgStrArr 转换为整数数组 list;
- 对 list 进行排序;
- 初始化变量 minType 为 0,表示最少需要的颜色种数;
- 当 list 不为空时,执行以下步骤:
- 获取 list 的第一个数 first,并从 list 中移除该数;
- 遍历 list 中的每个数,如果可以被 first 整除,则从 list 中移除该数;
- 更新 minType,将颜色种数加一。
- 输出 minType,表示最少需要的颜色种数。
五、Java算法源码
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int maxLen = Integer.parseInt(scanner.nextLine());String[] orgStrArr = scanner.nextLine().split("\\s");List<Integer> list = new ArrayList<>();for (String str : orgStrArr) {if (list.size() <= maxLen) {list.add(Integer.parseInt(str));}}Collections.sort(list);Iterator<Integer> iterator;int first;while (list.size() > 0) {iterator = list.iterator();first = iterator.next();iterator.remove();while (iterator.hasNext()) {if (iterator.next() % first == 0) {iterator.remove();}}minType++;}System.out.println(minType);
}
六、效果展示
🏆下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。