Java常用考试(程序设计题)

笔试题 java 文章 2020-12-27 13:25 120 0 全屏看文

1. 李红在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成

了 N 个 1 到 1000 之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把

其余相同的数去掉,不同的数对应着不同学生的学号。然后再把这些数从小到大排序,

按照排好的顺序去找同学做调查。请编写程序协助李红完成“去重”与“排序”的工作。

TreeSet<Integer> trr=new TreeSet<>();

//遍历
for (int i = 0; i < 100; i++) {
 //存入treeset
 trr.add((int)(Math.random()*1000));
}

//遍历
System.out.println(trr);


2. 编写方法 int digSum(nt arr[ ]),实现在一个数组 arr 中,找出一组不相邻的数字,使得

所选数字和最大。

package cn.sanshu.service.impl;
public  class Test{ 
	 public static void main(String[] args) {
	        int[] arr = {1, 2, 4, 1, 7, 8, 3};
	        System.out.println(recur_opt(arr.length - 1, arr));
	    }
	 
	 private static int recur_opt(int i, int[] arr) {
	        if (i == 0) return arr[0];
	        if (i == 1) return Math.max(arr[0], arr[1]);
	       
	        int a = recur_opt(i - 2, arr) + arr[i];
	        
	        int b = recur_opt(i - 1, arr);
	        return Math.max(a, b);
	    }
	 
	// 动态规划
	    private static int dp_opt(int[] arr) {
	    	
	    	// 特殊退出条件
	        if (arr.length == 1) return arr[0];  
	        if (arr.length == 2) return Math.max(arr[0], arr[1]);
	        
	        // 保留中间计算结果, 降低复杂度
	        int[] opt = new int[arr.length];
	        opt[0] = arr[0];
	        opt[1] = arr[1];
	        
	        for (int i = 2; i < opt.length; i++) {
	            int a = opt[i - 2] + arr[i];
	            int b = opt[i - 1];
	            opt[i] = Math.max(a, b);
	        }
	       
	        return opt[opt.length-1];
	    }
}


-EOF-