质数拆分:用户登录
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
将 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+" "); } } }