最新华为OD机试
2025华为od 机试2025B卷-华为机考OD2025年B卷
题目描述
疫情过后,希望小学终于又重新开学了,三年二班开学第一天的任务是将后面的黑板报重新制作。
黑板上已经写上了N个正整数,同学们需要给这每个数分别上一种颜色。
为了让黑板报既美观又有学习意义,老师要求同种颜色的所有数都可以被这种颜色中最小的那个数整除。
现在请你帮帮小朋友们,算算最少需要多少种颜色才能给这N个数进行上色。
输入描述
第一行有一个正整数N,其中。
第二行有N个int型数(保证输入数据在[1,100]范围中),表示黑板上各个正整数的值。
输出描述
输出只有一个整数,为最少需要的颜色种数。
示例1
输入
3
2 4 6
输出
3
2 4 6
说明
有数都能被2整除
示例2
输入
4
2 3 4 9
输出
2
说明
与4涂一种颜色,4能被2整除;3与9涂另一种颜色,9能被3整除。不能4个数涂同一个颜色,因为3与9不能被2整除。所以最少的颜色是两种。
解题思路
题目要求给黑板上的 N 个正整数 上色,具体的要求是:同种颜色的所有数都可以被这一颜色中最小的那个数整除。
换句话说,如果我们为某个数字选择了一种颜色,那么所有和它涂同种颜色的数都应该是它的倍数。目标是找到最少的颜色种类来满足这个条件。
颜色分配逻辑:每个数字从最小开始,尝试加入已经存在的组中,只有当它无法整除任何一个已有组的最小数时,才新建一个组。这种策略确保了所有组中,数字都满足题目要求——同组内的所有数字都可以被该组的最小数整除。
可以分为以下几个步骤:
1. 输入数据并排序
- 排序后的数组便于我们从最小的数字开始处理,因为最小数决定了它这一组的颜色。
2. 定义颜色数组
- 创建一个数组
colors
,用来存储已经作为组最小数的数字。 colorCount
用来统计已经使用了多少种颜色,即有多少个组。
3. 遍历每个数字,决定是否可以加入现有的颜色组
- 遍历排序后的
numList
数组,对于每个数字numList[i]
: