首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

【华为OD-E卷 - 110 数字涂色 100分(python、java、c++、js、c)】

  • 25-03-07 19:41
  • 3296
  • 13407
blog.csdn.net

【华为OD-E卷 - 数字涂色 100分(python、java、c++、js、c)】

题目

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

输入描述

  • 第一行有一个正整数N,其中。

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

输出描述

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

用例

用例一:
输入:
3
2 4 6
  • 1
  • 2
输出:
1
  • 1
用例二:
输入:
4
2 3 4 9
  • 1
  • 2
输出:
2
  • 1

python解法

  • 解题思路:
  • 本程序的目标是计算数组可以被分成的最少颜色组数,其中:

任何一个颜色组中的所有数字,都不能是另一个数字的倍数。
需要最少的颜色数,即尽可能少的组数。
解题步骤
读取输入

n:整数,表示数组元素个数。
arr:包含 n 个整数的列表。
递归划分颜色组 find_colors(nums)

排序数组:先对 nums 进行升序排序,确保最小数 base 先被选中。
选取最小数 base 作为第一个颜色组的基础:
将 base 作为当前组的代表。
过滤掉 nums 中所有 base 的倍数,得到 filtered。
递归调用 find_colors(filtered) 计算剩余数组的最小颜色组数。
最终返回 1 + find_colors(filtered),其中 1 代表当前颜色组,find_colors(filtered) 递归计算剩余部分的颜色组数。

# 读取输入
n = int(input())  # 读取数组大小
arr = list(map(int, input().split()))  # 读取数组元素

# 计算最少颜色组数的函数
def find_colors(nums):
    if not nums:  # 递归终止条件:如果数组为空,返回0
        return 0

    nums.sort()  # 排序数组,确保最小的数优先处理
    base = nums[0]  # 选取最小的数作为当前颜色组的基准

    # 过滤掉所有是 base 倍数的数,剩余的数进入下一个递归
    filtered = [num for num in nums if num % base != 0]

    # 1 (当前组) + 递归计算剩余数的颜色组数
    return 1 + find_colors(filtered)

# 输出最少颜色组数
print(find_colors(arr))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

java解法

  • 解题思路
  • 本程序的目标是计算数组可以被分成的最少颜色组数,其中:

任何一个颜色组中的所有数字,都不能是另一个数字的倍数。
需要最少的颜色数,即尽可能少的组数。
解题步骤
读取输入

读取整数 n,表示数组的元素个数。
读取 n 个整数,并存入 numbers 数组。
计算最少颜色组数 calculateMinColors(n, numbers)

排序 numbers:先对数组进行升序排序,确保较小的数先被考虑。
创建布尔数组 used[]:
used[i] == true 表示 numbers[i] 已经被归类到某个颜色组,不需要再考虑。
遍历 numbers 并标记倍数:
如果 numbers[i] 没有被使用,增加颜色组 colorCount。
遍历 numbers[j](j > i),如果 numbers[j] 是 numbers[i] 的倍数,则将其标记为已使用 used[j] = true。
返回 colorCount 作为最少颜色组数

统计出最小的颜色组数,并返回

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取数组大小
        int n = Integer.parseInt(scanner.nextLine());

        // 读取数组元素并转换为整数数组
        int[] numbers = Arrays.stream(scanner.nextLine().split(" "))
                              .mapToInt(Integer::parseInt)
                              .toArray();

        // 计算最少颜色组数并输出
        System.out.println(calculateMinColors(n, numbers));
    }

    public static int calculateMinColors(int n, int[] numbers) {
        Arrays.sort(numbers); // 对数组进行排序,确保较小的数先处理
        int colorCount = 0; // 记录最少颜色组数
        boolean[] used = new boolean[n]; // 标记数组,记录哪些数字已归类

        // 遍历所有数字,确定颜色组
        for (int i = 0; i < n; i++) {
            if (used[i]) continue; // 如果当前数字已归类,则跳过

            colorCount++; // 发现一个新的颜色组

            // 遍历剩余的数字,标记所有当前数字的倍数
            for (int j = i + 1; j < n; j++) {
                if (!used[j] && numbers[j] % numbers[i] == 0) {
                    used[j] = true; // 标记该数字已归类
                }
            }
        }

        return colorCount; // 返回最少颜色组数
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

C++解法

  • 解题思路
更新中
  • 1

C解法

  • 解题思路

更新中
  • 1

JS解法

  • 解题思路

更新中
  • 1

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

注:本文转载自blog.csdn.net的CodeClimb的文章"https://blog.csdn.net/CodeClimb/article/details/145184589"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top