news 2026/9/3 2:14:26

(新卷,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/3 0:23:28

企业管理的核心:协同、数据与持续优化

在当今快速变化的商业环境中&#xff0c;企业管理的核心究竟是什么&#xff1f;是严格的制度&#xff0c;先进的科技&#xff0c;还是优秀的团队&#xff1f;事实上&#xff0c;现代企业管理已演变为一个多维度的系统工程&#xff0c;其核心可以概括为流程协同化、数据驱动决策…

作者头像 李华
网站建设 2026/9/3 1:23:26

基于SpringBoot框架开发的景区民宿预约系统(毕设源码+文档)

课题说明本课题聚焦景区民宿住宿的便捷化预约与规范化管理需求&#xff0c;针对当前景区民宿信息分散、预约流程繁琐、房态信息不透明、订单管理效率偏低等痛点&#xff0c;设计开发基于SpringBoot框架的景区民宿预约系统。系统以SpringBoot为核心后端框架&#xff0c;结合前端…

作者头像 李华
网站建设 2026/9/3 0:23:31

阿里二面:如何保证 Redis 和 MySQL 的数据一致性?还在背“延时双删”的Sleep玄学?教你高性能 + 高可靠的方案

写在开头&#xff1a; 我在公众号发了一篇《先更新数据库还是先删除缓存&#xff1f;》的文章&#xff0c;里面和大家聊到了 binlog 兜底方案的实现思路。 文章发出后&#xff0c;有细心的小伙伴后台私信我&#xff0c;指出方案里漏掉了先删除缓存这个关键操作。 这个反馈非常精…

作者头像 李华
网站建设 2026/9/3 0:23:53

【Hadoop+Spark+python毕设】全球各地旅游体验评价数据分析系统、计算机毕业设计、包括数据爬取、数据分析、数据可视化、实战教学

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

作者头像 李华
网站建设 2026/9/3 1:31:26

详细分析线程池上下文的基本知识(附Demo)

目录前言1. 基本知识2. 父子线程数据不同3. 父子线程数据相同前言 Java基本知识&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 1. 基本知识 本意大概…

作者头像 李华
网站建设 2026/9/3 0:25:43

16、深入探索 XML:从基础概念到 SQL Server 实践

深入探索 XML:从基础概念到 SQL Server 实践 1. XML 基础概念 XML,即可扩展标记语言,是一种元语言,用于定义其他语言,这些被定义的语言被称为标记语言。XML 文档是通过标记数据创建的,即将数据封装在开始标签和结束标签之间。这些标签定义的元素形成层次结构,使 XML 文…

作者头像 李华