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,请产生符合下列要求的前10项整数序列:
若当前序列的最后2项的乘积为5位数以内的数,则把积作为其后继项;
否则后继项全为0。
输入说明:
两个整数a1,a2。
输出说明:
输出符合条件的前10项数字。数字之间用空格隔开,所有数据输出后换行。
输入样例:
4 8
输出样例:
32 256 8192 0 0 0 0 0 0 0
参考源码;
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[10];
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 = a2;
17. a2 = 0;
18. values[count++] = 0;
19. }
20. }
21. for (int i = 0; i < 10; i++) {
22. System.out.print(values[i] + " ");
23. }
24. System.out.println();
25. }
26. }
算法思路:
模拟算法。
运行截图:
运行实例1
运行实例2
运行实例3
3. 给定一个含有N个整数的序列(2
点击显示更多内容>>
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号