2019年第一届全国高校计算机能力挑战赛区域赛java编程题第二套试卷
2019年第一届全国高校计算机能力挑战赛区域赛第二套试卷编程的个人解答源码及思路1.某星球存在两种生物,A 种生物有 1 个头 6 条腿,B 种生物有 3 个头 4 条腿。来自地球的太空船刚刚在该星球降落,突然发现一大群这两种生物组成的队伍,由于时间紧,只数了头的数量和腿的数量,请帮助宇航员分析 A、B 两种生物各有多少个。输入说明:头的数量L 腿的数量Z(L,Z=100000);输出说明:A生物的数量 B生物的数量(两个整数用一个空格隔开);输入样例:10 32 输出样例:4 2参考源码:1. importjava.util.Scanner;2. publicclassFirstProblemPreliminary3. publicstaticvoidmain(Stringargs)4. Scannerinput=newScanner(System.in);5. longA,B,L,Z;6. L=input.nextInt();7. Z=input.nextInt();8. A=(3*Z-4*L)/14;9. B=(6*L-Z)/14;10. System.out.println(A+B);11. 12. 算法思路: 二元一次方程组,A+3B=L/6A+4B=Z,分别对A和B进行消元。运行截图:运行实例1(题目上的测试用例)运行实例22.对于给出的长度为 N(N1000)的正整数数组,满足连续 3 个元素均为合数的区间称为 3 合数区间,计算该数组中 3 合数区间的个数。输入说明:第一行,数组中元素个数 N,第二行,N 个正整数,用空格隔开。输出说明:3合数区间的个数输入样例:76 8 4 97 5 8 输出样例:2参考源码:1. importjava.util.Scanner;2. publicclassSecondProblemPreliminary3. publicstaticvoidmain(Stringargs)4. Scannerinput=newScanner(System.in);5. intn=input.nextInt();6. intdata=newintn;7. for(inti=0;in;i+)8. datai=input.nextInt();9. 10. intcount=0;11. for(inti=0;in-2;i+)12. booleanflag1=isCompositeNumbe(datai);13. booleanflag2=isCompositeNumbe(datai+1);14. booleanflag3=isCompositeNumbe(datai+2);15. if(flag1&flag2&flag3)16. count=count+1;17. 18. 19. System.out.println(count);20. 21. privatestaticbooleanisCompositeNumbe(intoneData)22. for(inti=2;ioneData;i+)23. if(oneData%i=0)24. returntrue;25. 26. 27. returnfalse;28. 29. 算法思路: 模拟算法,主要边界条件。运行截图:运行实例1(题目上的测试用例)运行实例2(数组元素个数小于3)运行实例3(2是素数)3.给定两个字符串,均只包含英文字母,需区分大小写,一个是源字符串 SS(长度 1000),另一个是目标字符串 TS(长度 1000),请问能否通过删除 SS 中的字符(不改变顺序)将它变换成 TS,如果可以输出 “YES”,不可以则输出 “NO”。输入说明:第一行为源字符串 SS,第二行为目标字符串 TS。输出说明:可以输出 “YES”,不可以输出 “NO”。输入样例 1:Thereisacomputer Treat 输出样例 1:YES 输入样例 2:Thereisacomputer Trait 输出样例 2:NO参考源码:1. importjava.util.ArrayList;2. importjava.util.Scanner;3. publicclassThirdProblemPreliminary4. publicstaticvoidmain(Stringargs)5. Scannerinput=newScanner(System.in);6. ArrayListslist=newArrayList();7. Stringstrs=input.nextLine();8. Stringdtrs=input.nextLine();9. charscharArray=strs.toCharArray();10. chardcharArray=dtrs.toCharArray();11. for(inti=0;ischarArray.length;i+)12. slist.add(scharArrayi);13. 14. intindex=0;15. for(inti=0;i=dcharArray.length)17. break;18. 19. if(slist.get(i)!=dcharArrayindex)20. slist.remove(i-);21. else22. index+;23. 24. 25. if(slist.size()=dcharArray.length)26. System.out.println(YES);27. else28. System.out.println(NO);29. 30. 31. 算法思路: 模拟算法。运行截图:运行实例1(题目上的测试用例)运行实例2(题目上的测试用例)运行实例3(SS=TS)4.数字连连看,给出一个整数数组和一个目标值,请在数组中找到三个元素,它们的和为该目标值。输入说明:第一行是整数 N 和 T,N(N10000)表示整数数组中元素个数,T 是目标值。第二行是 N 个整数,表示数组中的元素,且每个数的绝对值小于等于 100000。输出说明:找到的这三个匹配元素所在位置(数组元素起始位置为 1),中间用一个空格隔开,若存在多个,请输出位置最小的一个(例如:数组为 8 5 4 5 3,目标值为 16,位置 1 2 5 和 1 4 5 均满足条件,输出 1 2 5);不满足输出 - 1。输入样例:7 122 8 7 6 3 4 3输出样例:1 3 5参考源码:1. importjava.util.Scanner;2. publicclassFourthProblemPreliminary3. publicstaticvoidmain(Stringargs)4. Scannerinput=newScanner(System.in);5. intm,n;6. m=input.nextInt();7. n=input.nextInt();8. intarr=newintm;9. for(inti=0;iarr.length;i+)10. arri=input.nextInt();11. 12. for(inti=0;iarr.length-2;i+)13. for(intj=i+1;jarr.length-1;j+)14. for(intk=j+1;karr.length;k+)15. if(arri+arrj+arrk=n)16. System.out.println(i+1)+(j+1)+(k+1);17. return;18. 19. 20. 21. 22. System.out.println(-1);23. 24. 算法思路: 暴力算法,注意三个循环的起始值和结束值。运行实例:运行实例1(题目上的测试用例)运行实例2运行实例3(不满足条件)5.给定一个只包含0-9、+、*的合法数学表达式(长度1000),规定加号+的优先级高于乘号*,请输出计算结果。输入说明:合法的数学表达式输出说明:输出表达式的计算结果输入样例:12*3+12*2输出样例:360
收藏
编号:347369974
类型:共享资源
大小:159.47KB
格式:DOCX
上传时间:2023-03-14
10
金贝
- 关 键 词:
-
2019年
第一届计算机能力挑战赛
区域赛
java
- 资源描述:
-
2019年第一届全国高校计算机能力挑战赛区域赛
第二套试卷
编程的个人解答源码及思路
1.某星球存在两种生物,A 种生物有 1 个头 6 条腿,B 种生物有 3 个头 4 条腿。来自地球的太空船刚刚在该星球降落,突然发现一大群这两种生物组成的队伍,由于时间紧,只数了头的数量和腿的数量,请帮助宇航员分析 A、B 两种生物各有多少个。
输入说明:头的数量L 腿的数量Z(L,Z<=100000);
输出说明:A生物的数量 B生物的数量(两个整数用一个空格隔开);
输入样例:
10 32
输出样例:
4 2
参考源码:
1. import java.util.Scanner;
2. public class FirstProblemPreliminary {
3. public static void main(String[] args) {
4. Scanner input = new Scanner(System.in);
5. long A,B,L,Z;
6. L=input.nextInt();
7. Z=input.nextInt();
8. A=(3*Z-4*L)/14;
9. B=(6*L-Z)/14;
10. System.out.println(A+" "+B);
11. }
12. }
算法思路:
二元一次方程组,A+3B=L/6A+4B=Z,分别对A和B进行消元。
运行截图:
运行实例1(题目上的测试用例)
运行实例2
2.对于给出的长度为 N(N<1000)的正整数数组,满足连续 3 个元素均为合数的区间称为 3 合数区间,计算该数组中 3 合数区间的个数。
输入说明:第一行,数组中元素个数 N,第二行,N 个正整数,用空格隔开。
输出说明:3合数区间的个数
输入样例:
7
6 8 4 9 7 5 8
输出样例:
2
参考源码:
1. import java.util.Scanner;
2. public class SecondProblemPreliminary {
3. public static void main(String[] args) {
4. Scanner input = new Scanner(System.in);
5. int n = input.nextInt();
6. int[] data = new int[n];
7. for (int i = 0; i < n; i++) {
8. data[i] = input.nextInt();
9. }
10. int count = 0;
11. for (int i = 0; i < n - 2; i++) {
12. boolean flag1 = isCompositeNumbe(data[i]);
13. boolean flag2 = isCompositeNumbe(data[i + 1]);
14. boolean flag3 = isCompositeNumbe(data[i + 2]);
15. if (flag1 && flag2 && flag3) {
16. count = count + 1;
17. }
18. }
19. System.out.println(count);
20. }
21. private static boolean isCompositeNumbe(int oneData) {
22. for (int i = 2; i < oneData; i++) {
23. if (oneData % i == 0) {
24. return true;
25. }
26. }
27. return false;
28. }
29. }
算法思路:
模拟算法,主要边界条件。
运行截图:
运行实例1(题目上的测试用例)
运行实例2(数组元素个数小于3)
运行实例3(2是素数)
3.给定两个字符串,均只包含英文字母,需区分大小写,一个是源字符串 SS(长度 < 1000),另一个是目标字符串 TS(长度 < 1000),请问能否通过删除 SS 中的字符(不改变顺序)将它变换成 TS,如果可以输出 “YES”,不可以则输出 “NO”。
输入说明:第一行为源字符串 SS,第二行为目标字符串 TS。
输出说明:可以输出 “YES”,不可以输出 “NO”。
输入样例 1:
Thereisacomputer
Treat
输出样例 1:
YES
输入样例 2:
Thereisacomputer
Trait
输出样例 2:
NO
参考源码:
1. import java.util.ArrayList;
2. import java.util.Scanner;
3. public class ThirdProblemPreliminary {
4. public static void main(String[] args) {
5. Scanner input = new Scanner(System.in);
6. ArrayList slist = new ArrayList<>();
7. String strs = input.nextLine();
8. String dtrs = input.nextLine();
9. char[] scharArray = strs.toCharArray();
10. char[] dcharArray = dtrs.toCharArray();
11. for (int i = 0; i < scharArray.length; i++) {
12. slist.add(scharArray[i]);
13. }
14. int index = 0;
15. for (int i = 0; i < slist.size(); i++) {
16. if (index >= dcharArray.length) {
17. break;
18. }
19. if (slist.get(i) != dcharArray[index]) {
20. slist.remove(i--);
21. } else {
22. index++;
23. }
24. }
25. if (slist.size() >= dcharArray.length) {
26. System.out.println("YES");
27. } else {
28. System.out.println("NO");
29. }
30. }
31. }
算法思路:
模拟算法。
运行截图:
运行实例1(题目上的测试用例)
运行实例2(题目上的测试用例)
运行实例3(SS=TS)
4.数字连连看,给出一个整数数组和一个目标值,请在数组中找到三个元素,它们的和为该目标值。
输入说明:第一行是整数 N 和 T,N(N<10000)表示整数数组中元素个数,T 是目标值。
第二行是 N 个整数,表示数组中的元素,且每个数的绝对值小于等于 100000。
输出说明:找到的这三个匹配元素所在位置(数组元素起始位置为 1),中间用一个空格隔开,若存在多个,请输出位置最小的一个(例如:数组为 8 5 4 5 3,目标值为 16,位置 1 2 5 和 1 4 5 均满足条件,输出 1 2 5);不满足输出 - 1。
输入样例:
7 12
2 8 7 6 3 4 3
输出样例:
1 3 5
参考源码:
1. import java.util.Scanner;
2. public class FourthProblemPreliminary {
3. public static void main(String[] args) {
4. Scanner input = new Scanner(System.in);
5. int m, n;
6. m = input.nextInt();
7. n = input.nextInt();
8. int[] arr = new int[m];
9. for (int i = 0; i < arr.length; i++) {
10. arr[i] = input.nextInt();
11. }
12. for (int i = 0; i < arr.length-2; i++) {
13. for (int j = i+1; j < arr.length-1; j++) {
14. for (int k = j+1; k < arr.length; k++) {
15. if (arr[i] + arr[j] + arr[k] == n) {
16. System.out.println((i + 1) + " " + (j + 1) + " " + (k + 1));
17. return;
18. }
19. }
20. }
21. }
22. System.out.println("-1");
23. }
24. }
算法思路:
暴力算法,注意三个循环的起始值和结束值。
运行实例:
运行实例1(题目上的测试用例)
运行实例2
运行实例3(不满足条件)
5.给定一个只包含0-9、'+'、'*'的合法数学表达式(长度<1000),规定加号'+'的优先级高于乘号'*',请输出计算结果。
输入说明:合法的数学表达式
输出说明:输出表达式的计算结果
输入样例:
12*3+12*2
输出样例:
360
展开阅读全文
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。