在疫情过后,希望小学的三年二班重新开学。班级任务是将黑板上的 N 个正整数分别上色。为了使黑板报美观且有学习意义,老师规定同种颜色的所有数必须能被该颜色中最小的数整除。你需要计算出最少需要多少种颜色来完成这个任务。
从小到大排序后直接枚举一遍即可,将n个数划分为若干子集,标准是是否都能被各自子集的最小整数整除。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int N;
cin >> N; // 输入数字个数
vector<int> nums(N);
for (int i = 0; i < N; ++i) {
cin >> nums[i]; // 输入每个正整数
}
sort(nums.begin(), nums.end()); // 将数字排序
vector<bool> colored(N, false); // 记录数字是否已上色
int colors = 0; // 记录颜色种类数量
for (int i = 0; i < N; ++i) {
if (!colored[i]) { // 如果当前数字未上色
colors++; // 增加颜色计数
for (int j = i; j < N; ++j) {
if (nums[j] % nums[i] == 0) { // 如果能被最小数字整除
colored[j] = true; // 上色
}
}
}
}
cout << colors << endl; // 输出结果
return 0;
}
def min_colors(nums):
nums.sort() # 对数字进行排序
colored = [False] * len(nums) # 记录数字是否已上色
colors = 0 # 记录颜色种类数量
for i in range(len(nums)):
if not colored[i]: # 如果当前数字未上色
colors += 1 # 增加颜色计数
for j in range(i, len(nums)):
if nums[j] % nums[i] == 0: # 如果能被最小数字整除
colored[j] = True # 上色
return colors # 返回结果
# 输入处理
N = int(input())
nums = list(map(int, input().split()))
print(min_colors(nums)) # 输出结果
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 = scanner.nextInt(); // 输入数字个数
int[] nums = new int[N];
for (int i = 0; i < N; i++) {
nums[i] = scanner.nextInt(); // 输入每个正整数
}
Arrays.sort(nums); // 将数字排序
boolean[] colored = new boolean[N]; // 记录数字是否已上色
int colors = 0; // 记录颜色种类数量
for (int i = 0; i < N; i++) {
if (!colored[i]) { // 如果当前数字未上色
colors++; // 增加颜色计数
for (int j = i; j < N; j++) {
if (nums[j] % nums[i] == 0) { // 如果能被最小数字整除
colored[j] = true; // 上色
}
}
}
}
System.out.println(colors); // 输出结果
scanner.close();
}
}
疫情过后,希望小学终于又重新开学了,三年二班开学第一天的任务是将后面的黑板报重新制作。
黑板上已经写上了 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 整除。
所以最少的颜色是两种。