news 2026/4/23 13:53:29

(新卷,100分)- 数字涂色(Java JS Python C)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(新卷,100分)- 数字涂色(Java JS Python C)

(新卷,100分)- 数字涂色(Java & JS & Python & C)

题目描述

疫情过后,希望小学终于又重新开学了,三年二班开学第一天的任务是将后面的黑板报重新制作。

黑板上已经写上了N个正整数,同学们需要给这每个数分别上一种颜色。

为了让黑板报既美观又有学习意义,老师要求同种颜色的所有数都可以被这种颜色中最小的那个数整除。

现在请你帮帮小朋友们,算算最少需要多少种颜色才能给这N个数进行上色。

输入描述

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

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

输出描述

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

用例
输入

3
2 4 6

输出1
说明所有数都能被2整除
输入4
2 3 4 9
输出2
说明2与4涂一种颜色,4能被2整除;3与9涂另一种颜色,9能被3整除。不能4个数涂同一个颜色,因为3与9不能被2整除。所以最少的颜色是两种。
题目解析

简单的逻辑题,题目要求:“同种颜色的所有数都可以被这种颜色中最小的那个数整除”。

因此我们可以直接将输入数列进行升序排序,则数列从左到右,元素依次增大,我们每次取最左边的数arr[i],然后遍历它后面的所有数arr[j]去除它,若可以整除,则为一种颜色,若不可以整除,则为不同颜色。

本题难点主要在于,如何标记一个元素已经涂色了,我这里直接定义了一个长度和输入数列arr相同的数组color,color所有元素默认未初始化,一旦arr[j]可以整除arr[i],则color[j] = true。

Java算法源码
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = Integer.parseInt(sc.nextLine()); int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray(); System.out.println(getResult(n, arr)); } public static int getResult(int n, int[] arr) { Arrays.sort(arr); if (arr[0] == 1) { return 1; } boolean[] color = new boolean[n]; int count = 0; for (int i = 0; i < n; i++) { if (color[i]) continue; color[i] = true; for (int j = i + 1; j < n; j++) { if (!color[j] && arr[j] % arr[i] == 0) { color[j] = true; } } count++; } return count; } }
JS算法源码
/* JavaScript Node ACM模式 控制台输入获取 */ const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); const lines = []; rl.on("line", (line) => { lines.push(line); if (lines.length === 2) { let n = parseInt(lines[0]); let arr = lines[1].split(" ").slice(0, n); console.log(getMinColorCount(arr)); lines.length = 0; } }); function getMinColorCount(arr) { arr.sort((a, b) => a - b); if (arr[0] === 1) { return 1; } let color = new Array(arr.length); let count = 0; for (let i = 0; i < arr.length; i++) { if (color[i]) continue; color[i] = true; for (let j = i + 1; j < arr.length; j++) { if (!color[j] && arr[j] % arr[i] === 0) { color[j] = true; } } count++; } return count; }
Python算法源码
# 输入获取 n = int(input()) arr = list(map(int, input().split())) # 算法入口 def getResult(): arr.sort() if arr[0] == 1: return 1 color = [False]*n count = 0 for i in range(n): if color[i]: continue color[i] = True for j in range(i+1, n): if not color[j] and arr[j] % arr[i] == 0: color[j] = True count += 1 return count # 调用算法 print(getResult())
C算法源码
#include <stdio.h> #include <stdlib.h> int getResult(int nums[], int nums_size); int cmp(const void* a, const void* b) { return (*(int*) a) - (*(int*) b); } int main() { int n; scanf("%d", &n); int nums[n]; for(int i=0; i<n; i++) { scanf("%d", &nums[i]); } printf("%d\n", getResult(nums, n)); return 0; } int getResult(int nums[], int nums_size) { qsort(nums, nums_size, sizeof(int), cmp); if(nums[0] == 1) { return 1; } int* color = (int*) calloc(nums_size, sizeof(int)); int count = 0; for(int i=0; i<nums_size; i++) { if(color[i]) continue; color[i] = 1; for(int j=i+1; j<nums_size; j++) { if(!color[j] && nums[j] % nums[i] == 0) { color[j] = 1; } } count++; } return count; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 7:52:38

小柯剧场《等你爱我》首演泪洒现场,原来是一封赴爱的情书

12月24日晚上7&#xff1a;30小柯剧场年度大戏小柯音乐剧《等你爱我》以爱为核心的治愈之旅震首演。现场观众沉浸剧情之中&#xff0c;笑与泪交织成为全场最动人的主旋律。绝境破局 魂散归安 爱留人间父母附身的身体反差感拉满&#xff1a;严肃古板的父亲附身在有你暴发户的老板…

作者头像 李华
网站建设 2026/4/23 4:50:42

大数据技术核心解析与实操实战

在数字化时代&#xff0c;数据已成为核心生产要素&#xff0c;而大数据技术正是挖掘数据价值、驱动业务决策的关键支撑。从海量异构数据的存储到分布式计算&#xff0c;从数据清洗预处理到机器学习建模&#xff0c;大数据技术形成了一套完整的技术体系&#xff0c;广泛应用于金…

作者头像 李华
网站建设 2026/4/9 2:25:31

Lupa库功能及使用场景介绍

lupa是什么库&#xff1f;在开发中遇到了这个库名&#xff0c;以及在做技术选型时听说过&#xff0c;想了解其基本功能。 需要先明确Lupa的具体定义和用途&#xff0c;然后提供足够的技术细节来判断是否符合需求。 要知道有一个完全不同的"Lupa"——这是JetBrains研…

作者头像 李华
网站建设 2026/4/10 21:37:23

如何进行 Python 和 Lua 之间的复杂数据交换

深入理解Lupa库在Python和Lua间的数据交换&#xff0c;其核心在于“双向对象代理”机制和“引用环的打破”。这不仅仅是数据复制&#xff0c;而是建立了一个动态的桥梁。 &#x1f527; 核心工作机制对象代理&#xff1a;当你在Python中将一个复杂对象&#xff08;如字典&#…

作者头像 李华
网站建设 2026/4/23 9:27:51

基于微信小程序的智能在线预约挂号系统毕设源码+文档+讲解视频

前言 本课题聚焦医疗服务便民化与智能化升级需求&#xff0c;针对传统挂号方式排队时间长、号源信息不透明、就诊流程繁琐、医患匹配精准度不足等痛点&#xff0c;设计开发基于微信小程序的智能在线预约挂号系统。系统以微信小程序为核心载体&#xff0c;结合前端原生开发技术与…

作者头像 李华