2019 计算机能力挑战赛Java组
1.某星球存在两种生物,A种生物有1个头6条腿,B种生物有3个头4条腿。来自地球的太空船刚刚在该星球降落,突然发现一大群这两种生物组成的队伍,由于时间紧,只数了头的数量和腿的数量,请帮助宇航员分析A、B两种生物各有多少个。
输入说明:头的数量L腿的数量Z,(L,Z<=100000);输出说明:A生物的数量B生物的数量(两个整数用一个空格隔开);输入样例:10 32输出样例:4 2
public static void main(String [] s){ Scanner input1=new Scanner(System.in); int L=input1.nextInt(); int Z=input1.nextInt(); int y=(6*L-Z)/14; int x=L-3*y; System.out.print(x+" "+y); }
2.对于给出的长度为N(N<1000)的正整数数组,满足连续3个元素均为合数的区间称为3合数区间,计算该数组中3合数区间的个数。
输入说明:第一行,数组中元素个数N,第二行,N个正整数,用空格隔开。
输出说明:3合数区间的个数
输入样例:
7
6 8 4 9 7 5 8
输出样例:
2
public static void main(String[] args) { Scanner in = new Scanner(System.in); int result = 0; int N = in.nextInt(); int[] val = new int[N]; for (int i = 0;i < N;i++) { val[i] = in.nextInt(); } for (int i = 0;i < val.length - 2;i++) { boolean is = true; for (int j = i;j < i + 3;j++) { if (!isPrime(val[j])) { //如果val[j]不是合数 is = false; } } if (is) { result++; } } System.out.println(result); } public static boolean isPrime(int n) { //判断是否为合数 boolean flag = false; for (int i = 2; i < n/2; i++) { if (n % i == 0) { flag = true; } } return flag; }
3.给定两个字符串,均只包含英文字母,需区分大小写,一个是源字符串SS(长度<1000),另一个是目标字符串TS(长度<1000),请问能否通过删除SS中的字符(不改变顺序)将它变换成TS,如果可以输出“YES”,不可以则输出“NO”。
输入说明:第一行为源字符串SS,第二行为目标字符串TS。
输出说明:可以输出“YES”,不可以输出“NO”。
输入样例1:Thereisacomputer Treat输出样例1:YES输入样例2:Thereisacomputer Trait输出样例2:NO
public static void main(String [] s){ Scanner input1=new Scanner(System.in); String SS=input1.nextLine(); String TS=input1.nextLine(); int n=0; int j=0; for(int i=0;i<TS.length();i++) { for(;j<SS.length();j++) { if(SS.charAt(j)==TS.charAt(i)) { System.out.print(TS.charAt(i)); n++; break; } } } if(n==TS.length()) System.out.print("YES"); else System.out.print("NO"); }
总的来说,感觉这个比赛是让你快速做题,时间卡的紧,但都是很简单的暴力解决。第三题我曾想着用滑动窗口写,但发现确实是浪费时间了。