news 2026/9/24 6:26:51

(新卷,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/9/24 4:18:57

一篇看懂JWT:Web安全的“身份证”

诸神缄默不语-个人技术博文与视频目录 文章目录 什么是JWT&#xff1f;一个简单的比喻为什么需要JWT&#xff1f;JWT长什么样&#xff1f;1. 头部&#xff08;Header&#xff09;2. 载荷&#xff08;Payload&#xff09;3. 签名&#xff08;Signature&#xff09; 用Python玩转…

作者头像 李华
网站建设 2026/9/24 4:20:32

基于微信小程序的直播带货商品数据分析系统毕设源码+文档+讲解视频

前言 本课题聚焦直播带货行业的数据化运营需求&#xff0c;针对当前直播商品数据分散、分析维度单一、运营决策缺乏精准数据支撑等痛点&#xff0c;设计开发基于微信小程序的直播带货商品数据分析系统。系统以微信小程序为核心载体&#xff0c;结合前端原生开发技术与后端数据处…

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

基于 S7 - 1200 和博图 15.1 的三层立体车库 PLC 设计

三层立体车库plc s7-1200 博图15.1 1、设置启动、停止按钮&#xff0c;且设置指示灯显示车库的开关状态&#xff1b; 2、7个车位的车俩可以自由存取&#xff0c;且车库可以实现自动存取&#xff08;存取选择最优路径&#xff09;&#xff1b; 3、每个车位均有电机控制&#…

作者头像 李华
网站建设 2026/9/20 16:50:48

当图像开始跳舞:用Matlab玩转频率域滤镜

标题&#xff1a;基于matlab的理想滤波器和巴特沃斯滤波器设计 关键词&#xff1a;一阶巴特沃斯滤波器 理想滤波器 二维傅里叶变换 fft2 描述&#xff1a;对任意图像进行灰度化&#xff0c;然后进行二维傅里叶变化&#xff0c;设定一个阈值&#xff0c;对高频或者低频信号进行滤…

作者头像 李华
网站建设 2026/9/20 0:44:02

Java面试必看:ConcurrentHashMap并发度解析

文章目录Java面试必看&#xff1a;ConcurrentHashMap并发度解析&#xff1f;场景还原&#xff1a;面试官与我的对话什么是并发度&#xff1f;并发度的核心思想并发度的实现细节1. Segment数组2. 分段锁机制3. 动态调整Segment数量4. 高效的查找机制如何配置合适的并发度&#x…

作者头像 李华
网站建设 2026/9/20 16:59:10

计算机基础小题

第一章 填空题 基于&#xff08;存储程序&#xff09;原理的冯诺依曼计算机&#xff0c;其工作方式的基本特点是&#xff08;按地址访问并顺序执行指令&#xff09;&#xff08;指令&#xff09;和&#xff08;数据&#xff09;都存放在存储器中&#xff0c;&#xff08;控制器…

作者头像 李华