2022年第四届全国高校计算机能力挑战赛区域赛java编程题第一套试卷
2022年第四届全国高校计算机能力挑战赛区域赛(java)第一套试卷编程的个人解答源码及思路1.编写程序完成以下功能:输入正整数a的值,若a为偶数,求aa+aaaa+aaaaaa+直到a个a的累加和;若a为奇数,求a+aaa+aaaaa+直到a个a的累加和。输入说明:1至9之间的正整数a。输出说明:符合规律要求的连加算式(包含加数、运算符号和累加和,详见输出样例)输入样例1:5输入样例2:6输出样例1:5+555+55555=56115输出样例2:66+6666+666666=673398源码:1. import java.util.Scanner;2. public class FirstProblemPreliminary 3. public static void main(String args) 4. Scanner sc = new Scanner(System.in);5. int number = Integer.valueOf(sc.nextLine();6. int finalSum=0;7. String finalPattern=""8. if (number%2=0)9. for(int i=2;i<=number;i+=2)10. int stepNumber=stepNumber(number,i);11. finalSum=finalSum+stepNumber;12. finalPattern=finalPattern.concat(String.valueOf(stepNumber).concat("+");13. 14. 15. if (number%2=1)16. for(int i=1;i<=number;i+=2)17. int stepNumber=stepNumber(number,i);18. finalSum=finalSum+stepNumber;19. finalPattern=finalPattern.concat(String.valueOf(stepNumber).concat("+");20. 21. 22. finalPattern=finalPattern.substring(0,finalPattern.length()-1);23. finalPattern=finalPattern.concat("=").concat(String.valueOf(finalSum);24. System.out.println(finalPattern);25. 26. static int stepNumber(int number,int times)27. int sum=0;28. for(int i=0;i<times;i+)29. sum=sum*10+number;30. 31. return sum;32. 33. 思路:获取每一步的数值和对应的字符串(包含+号),字符串通过数值转换获取;数值进行累加,字符串进行连接;取出最后一个+号之前的字符串,连接=和最终结果(累加值)(上述代码的22行和23行)。 2.皖北流行一种叫做“干瞪眼”的扑克牌游戏,使用的扑克牌牌面数值包括:A(1),2,3,4,5,6,7,8,9,T(10),,J(11),Q(12),K(13)。这里10用T替换,暂时不考虑大鬼和小鬼。两手牌的大小规则如下(暂不考虑其他规则):a)单牌:只有两张牌刚好大一个点时才能进行比较,比较顺序为:A>K>Q>J>T>9>8>7>6>5>4>3。比如:6大于5,但是不比4大,6和4不能比较。单牌2属于特殊牌,可以和其他所有普通单牌比较,并且是最大的。b)对子:即两张牌的点数相同,规则和单牌相似,两个2是特殊对子,可以大于所有的其他对子。注意:对子和单牌不能进行比较。c)炸弹:3个点数相同的牌。炸弹可以大于任何单张和对子,炸弹之间的比较与单牌和对子不同,只要满足:222>AAA>KKK>QQQ>JJJ>TTT>.>333的规则的即可。即222是最大的,AAA可以大于KKK,也可以大于333。编写一个方法实现两手牌的比较:int compareCards (String firstCards, String secondCards)参数:firstCards是需要比较的第一手牌,secondCards是需要比较的第二手牌返回:int型数据,如果firstCards和secondCards一样大,返回0;如果firstCards大于secondCards,返回1;如果firstCards小于secondCards;返回-1;如果firstCards和secondCards无法比较,返回2。输入说明:要比较的两手牌,中间以空格隔开。每一手牌可能是任何大小的单牌、对子或炸弹。不符合规则的输入情况不需考虑。输出说明:两手牌的比较结果输入时两手牌之间用空格隔开。输入样例1:J T 输入样例2:J 8输出样例1:1输出样例2:2源码:1. import java.util.HashMap;2. import java.util.Scanner;3. public class SecondProblemPreliminary 4. public static void main(String args) 5. Scanner sc = new Scanner(System.in);6. String strArray = sc.nextLine().split("s+");7. String firstCards = strArray0;8. String secondCards = strArray1;9. System.out.println(compareCards(firstCards,secondCards);10. 11.12. static int compareCards(String firstCards, String secondCards) 13. /12=2 21=2 13=-1 31=1 23=-1 32=114. int lengthFirstCards = firstCards.length();15. int lengthSecondCards = secondCards.length();16. if (lengthFirstCards + lengthSecondCards = 3) 17. /不能比较(单牌和对子)18. /12 2119. return 2;20. 21. if (lengthFirstCards = 3) && (lengthSecondCards < 3) 22. /大于(第一手牌是炸弹,第二手牌是单牌或者对子)23. /31 3224. return 1;25. 26. if (lengthFirstCards < 3) && (lengthSecondCards = 3) 27. /小于(第二手牌是炸弹,第一手牌是单牌或者对子)28. /13 2329. return -1;30. 31. /同级比较32. HashMap<String, Integer> compareRules = new HashMap<>();33. String singleCardString = "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K", "A", "2"34. int numberSingleCards = singleCardString.length;35. for (int i = 0; i < numberSingleCards; i+) 36. compareRules.put(singleCardStringi, i);37. 38. /同级比较-炸弹39. if (lengthFirstCards = 3) 40. int index1 = compareRules.get(firstCards.substring(0, 1);41. int index2 = compareRules.get(secondCards.substring(0, 1);42. /大于43. if (index1 > index2) return 1;44. /小于45. if (index1 < index2) return -1;46. /等于47. return 0;48. else 49. /同级比较-单牌或者对子50. int index1 = compareRules.get(firstCards.substring(0, 1);51. int index2 = compareRules.get(secondCards.substring(0, 1);52. int diff = index1 - index2;53. if (diff = 0)54. return 0;55. if (firstCards.substring(0, 1).equalsIgnoreCase("2") 56. return 1;57. 58.