质数拆分:用户登录
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
将 2019 拆分为若干个两两不同的质数之和,一共有多少种不同的方法?
注意交换顺序视为同一种方法,例如 2+2017=2019 与 2017+2=2019 视为同一种方法。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码:
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class 质数拆分 {
static boolean st[] = new boolean[2020];
static int primes[] = new int[2020];
static int cnt = 1;
static long[][] dp;
public static void main(String[] args) {
//筛质数
for (int i = 2; i <= 2019; i++) {
if (!st[i]) {
primes[cnt++] = i;
for (int j = i + i; j <= 2019; j += i) {
st[j] = true;
}
}
}
dp = new long[cnt][2020];
dp[0][0] = 1;
for (int i = 1; i < cnt; i++) {
for (int j = 0; j <= 2019; j++) {
if(j < primes[i]){ //当前背包能够放得下这个素数大小吗?
dp[i][j] = dp[i-1][j];
}else{
dp[i][j] = dp[i-1][j]+dp[i-1][j-primes[i]];
}
}
}
System.out.println(dp[cnt-1][2019]);
}
}
明明的随机数:用户登录
题目描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N 个 1 到 1000 之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入描述
第 1 行为 1 个正整数,表示所生成的随机数的个数:N。
第 2 行有 N 个用空格隔开的正整数,为所产生的随机数。
输出描述
输出 2 行,第 1 行为 1 个正整数 M,表示不相同的随机数的个数。
第 2 行为 M 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
输入输出样例
示例 1
输入
10
20 40 32 67 40 20 89 300 400 15
输出
8
15 20 32 40 67 89 300 400
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Scanner;
import java.util.stream.Collectors;
public class 明明的随机数 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int a[] = new int[n];
for (int i = 0; i < a.length; i++) {
a[i] = sc.nextInt();
}
HashSet<Integer> set = new HashSet<Integer>();
for (int i = 0; i < a.length; i++) {
set.add(a[i]);
}
System.out.println(set.size());
ArrayList<Integer>list = new ArrayList<Integer>(set);
Collections.sort(list);
for (Integer i: list) {
System.out.print(i+" ");
}
}
}
世人皆唱桃之夭夭,见你才知灼灼其华。