【题目1】拆分成素数的最多素数数量
【代码】100%
import java.util.Scanner;
public class 网易_1 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int a[]=new int[n];
for(int i=0;i<n;i++) {
a[i]=scanner.nextInt();
}
long count=0;
for(int i=0;i<n;i++) {
count+=chaifen(a[i]);
}
System.out.println(count);
}
static int chaifen(int num) {
if(num<2) {
return 0;
}
return num/2;
}
}
【题目2】给定子序列subArr[]和父序列的长度resNum,输出包含给定子序列subArr的最小字典序父序列resArr[]。
都不包含重复元素。
【代码】100%
import java.util.HashSet;
import java.util.Scanner;
public class 网易_2 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int resNum=scanner.nextInt();
int subNum=scanner.nextInt();
int resArr[]=new int[resNum];
int subArr[]=new int[subNum];
HashSet<Integer>myset=new HashSet<Integer>();
for(int i=0;i<subNum;i++) {
subArr[i]=scanner.nextInt();
myset.add(subArr[i]);
}
int subCount=0;
int resCount=1;
for(int i=0;i<resNum;i++) {
while(myset.contains(resCount)) {
resCount++;
}
if(subCount>=subNum || resCount<subArr[subCount]) {
resArr[i]=resCount;
resCount++;
}else {
resArr[i]=subArr[subCount];
subCount++;
}
}
System.out.print(resArr[0]);
for(int i=1;i<resNum;i++) {
System.out.print(" "+resArr[i]);
}
}
}
【题目3】两人平分一堆物品,使两人分得的物品价值之和相等,多余出的物品丢弃。输出最小丢弃价值和。
【代码】100%
import java.util.Scanner;
public class 网易_3 {
static int drop;
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int T=scanner.nextInt();
for(int t=0;t<T;t++) {
drop=0;
int n=scanner.nextInt();
int a[]=new int[n];
for(int i=0;i<n;i++) {
a[i]=scanner.nextInt();
drop+=a[i];
}
System.out.println(drop( n, a));
}
}
static int drop(int n,int a[]) {
dp( n, a, 0, 0, 0, 0);
return drop;
}
static void dp(int n,int a[],int i,int o1sum,int o2sum,int dropSum){
if(i==n) {
if(o1sum==o2sum) {
drop=Math.min(drop, dropSum);
}
}else {
dp( n, a, i+1, o1sum, o2sum, dropSum+a[i]);
dp( n, a, i+1, o1sum+a[i], o2sum, dropSum);
dp( n, a, i+1, o1sum, o2sum+a[i], dropSum);
}
}
}