2022年第四届全国高校计算机能力挑战赛决赛java编程题
2022年第四届全国高校计算机能力挑战赛决赛(java)个人解答源码及思路,非评分标准答案。1.在光华集团的一次团建活动中,团建服务公司为光华集团员工设计了一系列闯关游戏,其中有一个关卡是要开启一个神秘通道,要开启神秘通道,游戏参与者需要答对一道题,题目是这样描述的:一个天平的一端放置了重量为N千克的物品,另一端是空的,现在天平旁边放了M个沙袋,其重量各不相同,现在要从M个沙袋中选出若干袋放到天平空的一端上,使天平两端刚好平衡,这样才能开启神秘通道,问有多少种选择沙袋的组合方法。这个问题把光华集团的员工难住了,请你编程序帮助游戏参与者找到正确答案。输入说明:第一行输入两个正整数N和M,N表示天平一端已经放置的物品重量(N=1000,单位为千克),M表示沙袋数量(M=50);第二行输入M个以空格分隔的正整数,表示M个沙袋的重量(每个沙袋的重量不超过100千克,M个沙袋重量各不相同)。输出说明:输出一个整数,表示选择若干沙袋使其总重量为N的不同组合方法的数量。输入样例1:12 42 5 7 3输出样例1:2输入样例2:20 54 2 11 3 9输出样例2:2参考源码:1. importjava.util.Scanner;2. publicclassFristProblemFinal3. publicstaticvoidmain(Stringargs)4. Scannersc=newScanner(System.in);5. intN=sc.nextInt();6. intM=sc.nextInt();7. intarray=newintM;8. for(inti=0;iM;i+)9. arrayi=sc.nextInt();10. 11. System.out.println(CalSum(array,N);12. 13.14. staticintCalSum(intarray,intresult)15. intnumberCombinations=0;16. for(inti=1;i1array.length;i+)17. intsum=0;18. for(intj=0;jarray.length;j+)19. if(i&1j)!=0)20. sum+=arrayj;21. 22. 23. if(sum=result)24. numberCombinations+;25. 26. 27. returnnumberCombinations;28. 29. 算法思路:对于M个沙袋,用M位的二进制数来表示,对应的数从1到2M-1(0001到111.1),某位为1,表示当前沙袋被选中。以M=3为例,001表示选中第1个沙袋,010表示选中第2个沙袋,011表示选中第1个沙袋和第2个沙袋,以此类推。将选中的沙袋重量之和与物品重点进行比较,相等则为符合要求的一种组合方式。运行截图:测试用例1(题目输入样例1)测试用例2(题目输入样例2)测试用例32. 临近期末,华园各种课程面临期末考试,为了更准确地了解学生对课程的掌握情况,需要对各班成绩进行统计分析,具体包括:计算班级成绩的平均分和标准差,统计各个分数段(A:90,100,B:81,89,C:71,80,D:61,70,E:0,60)的人数及所占比例。请编写程序,根据输入的某班级某门课的成绩,计算并输出其各种统计信息。标准差计算公式如下:输入说明:第一行输入正整数N,表示班级人数。第二行输入每位同学的分数。输出说明:第一行输出班级平均成绩(保留到小数点后2位)和成绩的标准差(保留到小数点后2位),中间用空格隔开。第二行起输出各个分数段的人数及占比,每个分数段占一行格式为:等级:人数占比。等级用AE的字母表示,占比保留到小数点后两位。输入样例1:2065 78 69 90 87 75 100 94 45 70 73 75 85 69 54 88 60 72 73 82输出样例1:75.20 13.16A:3 15.00%B:4 20.00%C:6 30.00%D:4 20.00%E:3 15.00%输入样例2:1567 80 78 64 90 85 76 56 92 90 86 78 76 85 69输出样例2:78.13 10.13A:3 20.00%B:3 20.00%C:5 33.33%D:3 20.00%E:1 6.67%参考源码:1. importjava.text.DecimalFormat;2. importjava.util.Scanner;3. SuppressWarnings(ALL)4. publicclassSecondProblemFinal5. publicstaticvoidmain(Stringargs)6. Scannersc=newScanner(System.in);7. intfiveLevels=newint5;8. intN=sc.nextInt();9. inteachScrores=newintN;10. inttotalScores=0;11. for(inti=0;i=90)16. fiveLevels0+;17. continue;18. 19. if(currentScore=81)20. fiveLevels1+;21. continue;22. 23. if(currentScore=71)24.25. fiveLevels2+;26. continue;27. 28. if(currentScore=61)29. fiveLevels3+;30. continue;31. 32. if(currentScore=0)33. fiveLevels4+;34. continue;35. 36. 37. doubleaverageScore=totalScores*1.0/N;38. doubletemp=0;39. for(inti=0;iN;i+)40. temp=temp+(eachScroresi-averageScore)*(eachScroresi-averageScore);41. 42. temp=temp/N;43. doublevariance=Math.sqrt(temp);44. doublelevelA=fiveLevels0*1.0/N;45. doublelevelB=fiveLevels1*1.0/N;46. doublelevelC=fiveLevels2*1.0/N;47. doublelevelD=fiveLevels3*1.0/N;48. doublelevelE=fiveLevels4*1.0/N;49. DecimalFormatdf1=newDecimalFormat(0.00);50. DecimalFormatdf2=newDecimalFormat(0.00%);51. System.out.println(df1.format(averageScore)+df1.format(variance);52. System.out.println(A:+fiveLevels0+df2.format(levelA)+%);53. System.out.println(B:+fiveLevels1+df2.format(levelB)+%);54. System.out.println(C:+fiveLevels2+df2.format(levelC)+%);55. System.out.println(D:+fiveLevels3+df2.format(levelD)+%);56. System.out.println(E:+fiveLevels4+df2.format(levelE)+%);57. 58. 算法思路:模拟算法。有一处需要特别注意,题目设置的分数等级(五级制)判断标准与我们通常采用的标准不完全相同。(具体原因不知)我们通常的五级制标准是:A:90,100,B:80,89,C:70
收藏
编号:347451717
类型:共享资源
大小:276.62KB
格式:DOCX
上传时间:2023-03-15
10
金贝
- 关 键 词:
-
2022年
第四届
计算机能力挑战赛
决赛
java
- 资源描述:
-
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到111..1),某位为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
展开阅读全文

金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。