2020年第二届计算机能力挑战赛决赛java编程题第一套试卷
2020年第二届全国高校计算机能力挑战赛决赛(java)个人解答源码及思路(第一套试卷)1.某高校食堂开办了一个自助餐厅,使用智能餐盘和自动结算,计算学生餐费。智能餐盘能够识别所打菜品类型,重量,单价(计价单位为:元/100克)。食堂计划以每道菜、汤独立定价;主食200克以内免费,200克以上部分收费(如果打了多道主食,依据输入次序累计免费200克以下部分)。为鼓励学生健康饮食,学校鼓励学生联网分享运动信息,参照计步数进行阶梯折扣,0-5999步不打折,6000-9999步为9折,10000步以上均为8折。试根据餐盘提供的信息和学生的计步数,计算该同学某次用餐的最终餐费。输入说明:第1行为该生本次用餐所打的所有饭菜种类数量N(0N10);第2行起每一行顺序为盘中每道饭菜的信息,包括:类型(M:荤菜/V:素菜/R:主食/S:汤)、重量(克,整数)、单价(元/100克);第N+2行为该同学的计步数。输出说明:最终餐费(保留两位小数)输入样例:6M 50 3.00V 100 1.50M 50 5.00V 150 2.00R 150 0.10S 150 0.008754输出样例:7.65参考源码:1. importjava.text.DecimalFormat;2. importjava.util.Scanner;3. publicclassFirstProblemFinal4. publicstaticvoidmain(Stringargs)5. Scannerin=newScanner(System.in);6. intn=in.nextInt();7. doubletotalPrice=0;8. intbase=200;9. for(inti=0;i=0)16. totalPrice=totalPrice+base*price;17. base=0;18. else19. base=-base;20. 21. continue;22. 23. totalPrice=totalPrice+weight*price;24. 25. longsteps=in.nextInt();26. if(steps=10000)27. totalPrice=totalPrice*0.8;28. elseif(steps=6000)29. totalPrice=totalPrice*0.9;30.31. 32. DecimalFormatdf=newDecimalFormat(0.00);33. System.out.println(df.format(totalPrice);34. 35. 算法思路: 模拟算法。主食免费采用的方法是:当差值=0,则将免费标准设为0;为差值0,则将免费标准设为-差值,因为存在多个主食累加的情况。运行截图:运行实例1运行实例2(多个主食)2. 给定非负整数序列的前两项a1,a2,请按如下规则产生符合要求整数序列:若当前序列的最后2项的乘积为5位数以内的数,则把积作为其后继项;若当前序列的最后两项之积为5位数以上的数,则把该数分别对10000求余和求商,把余和商作为其后继两项。请输出所产生的前10项数字。输入说明:两个整数a1,a2。输出说明:输出符合条件的前10项数字。数字之间用空格隔开,所有数据输出后换行。输入样例:4 8输出样例:32 256 8192 7152 209 4768 149 432 71 672参考源码;1. importjava.util.Scanner;2. publicclassSecondProblemFinal3. publicstaticvoidmain(Stringargs)4. Scannerin=newScanner(System.in);5. longa1=in.nextInt();6. longa2=in.nextInt();7. longvalues=newlong11;8. intcount=0;9. while(count10)10. longtemp=a1*a2;11. if(temp10000)12. a1=a2;13. a2=temp;14. valuescount+=a2;15. else16. a1=temp%10000;17. valuescount+=a1;18. a2=temp/10000;19. valuescount+=a2;20. 21. 22. for(inti=0;i10;i+)23. System.out.print(valuesi+);24. 25. System.out.println();26.27. 28. 算法思路: 模拟算法,主要关注两种情况下的a1和a2的变化(数列一次增加一个数,数列一次增加两个数)。运行截图:运行实例1运行实例2运行实例33. 给定一个含有N个整数的序列(2N10000),输入一个整数K(KN),从K的位置把该序列分为2个部分,分别为1到K部分,K+1到N部分。然后在1到K部分执行从小到大排序;在K+1到N部分执行从大到小排序(即前一部分从小到大,后一部分从大到小);然后再在这两部分分别执行前半部分数据(注:前半部分数据的长度上取整,可参考样例)从小到大排序,后半部分数据从大到小排序;最后输出该整数序列。输入说明:第一行是正整数N(2N10000),正整数K(1=KN);第二行依次输入这N个数。输出说明:经过操作后的这N个数的序列。数字之间用空格隔开,所有数据输出后换行。输入样例:10 51 2 3 4 5 6 7 8 9 10输出样例:1 2 3 5 4 8 9 10 7 6参考源码:1. importjava.util.Arrays;2. importjava.util.Collections;3. importjava.util.Scanner;4. publicclassThirdProblemFinal5. publicstaticvoidmain(Stringargs)6. Scannerin=newScanner(System.in);7. intN=in.nextInt();8. intK=in.nextInt();9. LongfirstPartValues=newLongK;10. LongsecondPartValues=newLongN-K;11. for(inti=0;iK;i+)12. firstPartValuesi=in.nextLong();13. 14. for(inti=0;iN-K;i+)15. secondPartValuesi=in.nextLong();16. 17. Arrays.sort(firstPartValues);18. Arrays.sort(secondPartValues,Collections.reverseOrder();19. intfirstPartValues1Length=(K/2=0)?K/2:K/2+1;20. for(intstart=firstPartValues1Length,end=K-1;startend;start+,end-)21. Longtemp=firstPartValuesstart;22. firstPartValuesstart=firstPartValuesend;23. firstPartValuesend=temp;24.25. 26. intfirstPartValues2Length=(N-K)/2=0?(N-K)/2:(N-K)/2+1;27. for(intstart=0,end=firstPartValues2Length-1;startend;start+,end-)28. Longtemp=secondPartValuesstart;29. secondPartValuesstart=secondPa
收藏
编号:347451422
类型:共享资源
大小:248.13KB
格式:DOCX
上传时间:2023-03-15
10
金贝
- 关 键 词:
-
2020年
第二届
计算机能力挑战赛
决赛
java
- 资源描述:
-
2020年第二届全国高校计算机能力挑战赛决赛(java)
个人解答源码及思路
(第一套试卷)
1.某高校食堂开办了一个自助餐厅,使用智能餐盘和自动结算,计算学生餐费。
智能餐盘能够识别所打菜品类型,重量,单价(计价单位为:元/100克)。
食堂计划以每道菜、汤独立定价;主食200克以内免费,200克以上部分收费(如果打了多道主食,依据输入次序累计免费200克以下部分)。
为鼓励学生健康饮食,学校鼓励学生联网分享运动信息,参照计步数进行阶梯折扣,0-5999步不打折,6000-9999步为9折,10000步以上均为8折。试根据餐盘提供的信息和学生的计步数,计算该同学某次用餐的最终餐费。
输入说明:
第1行为该生本次用餐所打的所有饭菜种类数量N(0
= 0) {
16. totalPrice = totalPrice + base * price;
17. base = 0;
18. } else {
19. base = -base;
20. }
21. continue;
22. }
23. totalPrice = totalPrice + weight * price;
24. }
25. long steps = in.nextInt();
26. if (steps >= 10000) {
27. totalPrice = totalPrice * 0.8;
28. } else if (steps >= 6000) {
29. totalPrice = totalPrice * 0.9;
30.
31. }
32. DecimalFormat df = new DecimalFormat("0.00");
33. System.out.println(df.format(totalPrice));
34. }
35. }
算法思路:
模拟算法。主食免费采用的方法是:当差值>=0,则将免费标准设为0;为差值<0,则将免费标准设为-差值,因为存在多个主食累加的情况。
运行截图:
运行实例1
运行实例2(多个主食)
2. 给定非负整数序列的前两项a1,a2,请按如下规则产生符合要求整数序列:若当前序列的最后2项的乘积为5位数以内的数,则把积作为其后继项;若当前序列的最后两项之积为5位数以上的数,则把该数分别对10000求余和求商,把余和商作为其后继两项。请输出所产生的前10项数字。
输入说明:两个整数a1,a2。
输出说明:输出符合条件的前10项数字。数字之间用空格隔开,所有数据输出后换行。
输入样例:
4 8
输出样例:
32 256 8192 7152 209 4768 149 432 71 672
参考源码;
1. import java.util.Scanner;
2. public class SecondProblemFinal {
3. public static void main(String[] args) {
4. Scanner in = new Scanner(System.in);
5. long a1 = in.nextInt();
6. long a2 = in.nextInt();
7. long[] values = new long[11];
8. int count = 0;
9. while (count < 10) {
10. long temp = a1 * a2;
11. if (temp < 10000) {
12. a1=a2;
13. a2=temp;
14. values[count++] = a2;
15. } else {
16. a1 = temp % 10000;
17. values[count++] = a1;
18. a2 = temp / 10000;
19. values[count++] = a2;
20. }
21. }
22. for (int i = 0; i < 10; i++) {
23. System.out.print(values[i] + " ");
24. }
25. System.out.println();
26.
27. }
28. }
算法思路:
模拟算法,主要关注两种情况下的a1和a2的变化(数列一次增加一个数,数列一次增加两个数)。
运行截图:
运行实例1
运行实例2
运行实例3
3. 给定一个含有N个整数的序列(2
展开阅读全文

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