【华为OD机试真题 Python语言】14、数字涂色 | 机试真题+思路参考+代码解析

这篇博客介绍了华为OD机试中的一道Python编程题,涉及数字涂色问题。题目要求计算最少需要多少种颜色,使得黑板上的每个数都能被同色中最小数整除。解决方案包括创建布尔数组记录整除关系,通过两层循环遍历计算不需被整除的数的数量,最后输出所需颜色数。
摘要由CSDN通过智能技术生成


🍂个人博客首页: 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

说明:
24涂一种颜色,4能被2整除;

39涂另一种颜色,9能被3整除。

不能4个数涂同一个颜色,因为39不能被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)


作者:KJ.JK

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KJ.JK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值