资源描述
2022年第四届全国高校计算机能力挑战赛决赛(java) 个人解答源码及思路,非评分标准答案。 1.在光华集团的一次团建活动中,团建服务公司为光华集团员工设计了一系列 闯关游戏,其中有一个关卡是要开启一个神秘通道,要开启神秘通道,游戏参与者需要答对一道题,题目是这样描述的:一个天平的一端放置了重量为N千克的物品,另一端是空的,现在天平旁边放了M个沙袋,其重量各不相同,现在要从M个沙袋中选出若干袋放到天平空的一端上,使天平两端刚好平衡,这样才能开启神秘通道,问有多少种选择沙袋的组合方法。这个问题把光华集团的员工难住了,请你编程序帮助游戏参与者找到正确答案。 输入说明: 第一行输入两个正整数N和M,N表示天平一端已经放置的物品重量(N<=1000,单位为千克),M表示沙袋数量(M<=50);第二行输入M个以空格分隔的正整数,表示M个沙袋的重量(每个沙袋的重量不超过100千克,M个沙袋重量各不相同)。 输出说明: 输出一个整数,表示选择若干沙袋使其总重量为N的不同组合方法的数量。 输入样例1: 12 4 2 5 7 3 输出样例1: 2 输入样例2: 20 5 4 2 11 3 9 输出样例2: 2 参考源码: 1. import java.util.Scanner; 2. public class FristProblemFinal { 3.     public static void main(String[] args) { 4.         Scanner sc = new Scanner(System.in); 5.         int N = sc.nextInt(); 6.         int M = sc.nextInt(); 7.         int[] array = new int[M]; 8.         for (int i = 0; i < M; i++) { 9.             array[i] = sc.nextInt(); 10.         } 11.         System.out.println(CalSum(array, N)); 12.     } 13. 14.     static int CalSum(int[] array, int result) { 15.         int numberCombinations = 0; 16.         for (int i = 1; i < 1 << array.length; i++) { 17.             int sum = 0; 18.             for (int j = 0; j < array.length; j++) { 19.                 if ((i & 1 << j) != 0) { 20.                     sum += array[j]; 21.                 } 22.             } 23.             if (sum == result) { 24.                 numberCombinations++; 25.             } 26.         } 27.         return numberCombinations; 28.     } 29. } 算法思路: 对于M个沙袋,用M位的二进制数来表示,对应的数从1到2M-1(000…1到1111),某位为1,表示当前沙袋被选中。以M=3为例,001表示选中第1个沙袋,010表示选中第2个沙袋,011表示选中第1个沙袋和第2个沙袋,以此类推。将选中的沙袋重量之和与物品重点进行比较,相等则为符合要求的一种组合方式。 运行截图: 测试用例1(题目输入样例1) 测试用例2(题目输入样例2) 测试用例3 2. 临近期末,华园各种课程面临期末考试,为了更准确地了解学生对课程的掌握情况,需要对各班成绩进行统计分析,具体包括:计算班级成绩的平均分和标准差,统计各个分数段(A:[90,100],B:[81,89],C:[71,80],D:[61,70],E:[0,60])的人数及所占比例。请编写程序,根据输入的某班级某门课的成绩,计算并输出其各种统计信息。 标准差计算公式如下: 输入说明: 第一行输入正整数N,表示班级人数。 第二行输入每位同学的分数。 输出说明: 第一行输出班级平均成绩(保留到小数点后2位)和成绩的标准差(保留到小数点后2位),中间用空格隔开。 第二行起输出各个分数段的人数及占比,每个分数段占一行格式为:等级:人数占比。等级用A~E的字母表示,占比保留到小数点后两位。 输入样例1: 20 65 78 69 90 87 75 100 94 45 70 73 75 85 69 54 88 60 72 73 82 输出样例1: 75.20 13.16 A:3 15.00% B:4 20.00% C:6 30.00% D:4 20.00% E:3 15.00% 输入样例2: 15 67 80 78 64 90 85 76 56 92 90 86 78 76 85 69 输出样例2: 78.13 10.13 A:3 20.00% B:3 20.00% C:5 33.33% D:3 20.00% E:1 6.67% 参考源码: 1. import java.text.DecimalFormat; 2. import java.util.Scanner; 3. @SuppressWarnings("ALL") 4. public class SecondProblemFinal { 5.     public static void main(String[] args) { 6.         Scanner sc = new Scanner(System.in); 7.         int[] fiveLevels = new int[5]; 8.         int N = sc.nextInt(); 9.         int[] eachScrores = new int[N]; 10.         int totalScores = 0; 11.         for (int i = 0; i < N; i++) { 12.             int currentScore = sc.nextInt(); 13.             totalScores += currentScore; 14.             eachScrores[i] = currentScore; 15.             if (currentScore >= 90) { 16.                 fiveLevels[0]++; 17.                 continue; 18.             } 19.             if (currentScore >= 81) { 20.                 fiveLevels[1]++; 21.                 continue; 22.             } 23.             if (currentScore >= 71) { 24. 25.                 fiveLevels[2]++; 26.                 continue; 27.             } 28.             if (currentScore >= 61) { 29.                 fiveLevels[3]++; 30.                 continue; 31.             } 32.             if (currentScore >= 0) { 33.                 fiveLevels[4]++; 34.                 continue; 35.             } 36.         } 37.         double averageScore = totalScores * 1.0 / N; 38.         double temp = 0; 39.         for (int i = 0; i < N; i++) { 40.             temp = temp + (eachScrores[i] - averageScore) * (eachScrores[i] - averageScore); 41.         } 42.         temp = temp / N; 43.         double variance = Math.sqrt(temp); 44.         double levelA = fiveLevels[0] * 1.0 / N ; 45.         double levelB = fiveLevels[1] * 1.0 / N ; 46.         double levelC = fiveLevels[2] * 1.0 / N ; 47.         double levelD = fiveLevels[3] * 1.0 / N ; 48.         double levelE = fiveLevels[4] * 1.0 / N ; 49.         DecimalFormat df1 = new DecimalFormat("0.00"); 50.         DecimalFormat df2 = new DecimalFormat("0.00%"); 51.         System.out.println(df1.format(averageScore) + " " + df1.format(variance)); 52.         System.out.println("A:" + fiveLevels[0] + " " + df2.format(levelA) + "%"); 53.         System.out.println("B:" + fiveLevels[1] + " " + df2.format(levelB) + "%"); 54.         System.out.println("C:" + fiveLevels[2] + " " + df2.format(levelC) + "%"); 55.         System.out.println("D:" + fiveLevels[3] + " " + df2.format(levelD) + "%"); 56.         System.out.println("E:" + fiveLevels[4] + " " + df2.format(levelE) + "%"); 57.     } 58. } 算法思路: 模拟算法。有一处需要特别注意,题目设置的分数等级(五级制)判断标准与我们通常采用的标准不完全相同。(具体原因不知) 我们通常的五级制标准是:A:[90,100],B:[80,89],C:[70
点击显示更多内容>>
收藏
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号