🍂个人博客首页: KJ.JK
🍂专栏介绍: 华为OD机试真题汇总,定期更新华为OD各个时间阶段的机试真题,每日定时更新,本专栏将使用Python语言进行更新解答,包含真题,思路分析,代码参考,欢迎大家订阅学习
一、题目
🎃题目描述
疫情过后,希望小学终于又重新开学了,三年二班开学第一天的任务是将后面的黑板报重新制作。
黑板上已经写上了N个正整数,同学们需要给这每个数分别上一种颜色。
为了让黑板报既美观又有学习意义,老师要求同种颜色的所有数都可以被这种颜色中最小的那个数整除。
现在请你帮帮小朋友们,算算最少需要多少种颜色才能给这N个数进行上色
🎃输入输出
输入
第一行有一个正整数N
第二行有N个int型数(保证输入数据在[1,100]范围中),表示黑板上各个正整数的值
输出
输出只有一个整数,为最少需要的颜色种数。
🎃样例1
输入
3
2 4 6
输出
1
说明:
所有数都能被2整除
🎃样例2
输入
4
2 3 4 9
输出
2
说明:
2与4涂一种颜色,4能被2整除;
3与9涂另一种颜色,9能被3整除。
不能4个数涂同一个颜色,因为3与9不能被2整除。所以最少的颜色是两种
二、思路参考
1、创建一个布尔类型的数组is_divisible,用于记录每个数是否能被其他数整除
2、初始化color_count变量为0,用于记录需要的颜色种数
3、使用两层循环遍历所有数,检查每个数是否能被其他数整除:
如果nums[j]能被nums[i]整除,则将is_divisible[j]设置为True,表示nums[j]能被其他数整除
如果nums[i]能被nums[j]整除,则将is_divisible[i]设置为True,表示nums[i]能被其他数整除
4、统计不需要被其他数整除的数的个数:
遍历is_divisible数组,如果某个数对应的元素为False,表示该数不需要被其他数整除,将color_count加1
5、返回color_count作为最少需要的颜色种数。
三、代码参考
def get_min_colors(nums):
N = len(nums)
is_divisible = [False] * N # 用于记录每个数是否能被其他数整除
color_count = 0 # 记录需要的颜色种数
# 检查每个数是否能被其他数整除
for i in range(N):
for j in range(i + 1, N):
if nums[j] % nums[i] == 0:
is_divisible[j] = True
elif nums[i] % nums[j] == 0:
is_divisible[i] = True
# 统计不需要被其他数整除的数的个数
for i in range(N):
if not is_divisible[i]:
color_count += 1
return color_count
# 读取输入的数据
N = int(input())
nums = list(map(int, input().split()))
# 调用函数计算最少需要的颜色种数
result = get_min_colors(nums)
# 输出结果
print(result)