解题思路
题目一、
1、题目名称:严查枪火 X国最近开始严管枪火。 像是“ak”,“m4a1”,“skr”。都是明令禁止的。
现在小Q查获了一批违禁物品其中部分是枪支。 小Q想知道自己需要按照私藏枪火来关押多少人。 (只有以上三种枪被视为违法)
解题思路:
遍历数组中的数,如果出现“ak”,“m4a1”,“skr”就记录下来,返回出现的总次数即可。
比赛提交代码:
import java.util.ArrayList; import java.util.Scanner; class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str_0 = scan.nextLine().trim(); int n = Integer.parseInt(str_0); ArrayList<String> vector = new ArrayList<>(); for (int i = 0; i < n; i++){ String str_1 = scan.nextLine().trim(); vector.add(str_1); } scan.close(); int result = solution(n, vector); System.out.println(result); } public static int solution(int n, ArrayList<String> vector){ int result = 0; for(int i = 0;i < n; ++i){ if(vector.get(i).equals("ak") || vector.get(i).equals("m4a1") || vector.get(i).equals("skr")) result++; } return result; } }
提交结果:
题目二、
2、题目名称:鬼画符门 鬼画符门,每年都会统计自己宗门鬼画符消耗的数量,往年一直是大师兄管理, 但是这次鬼艺接手了, 你能帮鬼艺写一个
程序统计每年消耗数量最多的鬼画符吗?
讲讲解题思路吧,这道题提交代码显示的是先前提交错误的那一版,正确的那一版丢失了,就不粘贴代码了:
可以用HashMap来存储,主键存放出现过得 鬼画符类型,value值存储的就是出现次数,最终只需要输出value值最大的相应主键即可。
题目三、
3、题目名称:收件邮箱 已知字符串str,str表示邮箱的不标准格式。 其中”.”会被记录成”dot”,”@”记录成”at”。
写一个程序将str转化成可用
的邮箱格式。(可用格式中字符串中除了开头结尾所有”dot”,都会被转换,”at”只会被转化一次,开头结尾的不转化)
解题思路:
将字符串转换为字符数组,遍历数组,出去开头结尾外,遍历到 a就判断后面是否有 t;遍历到d就判断后面两个是否为 o 和 t;
将条件的元素其中一个转换,其余用空格代替。
最终忽略掉空格,将字符数组的所有元素拼接起来输出即可。
提交的代码:
import java.util.ArrayList; import java.util.Scanner; class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str_0 = scan.nextLine().trim(); String str = str_0; scan.close(); String result = solution(str); System.out.println(result); } public static String solution(String str){ String result = ""; char[] arr = str.toCharArray(); int n = arr.length; int count = 0; for(int i = 1;i < n-2;++i){ if(count == 0){ if(arr[i] == 'a' && arr[i+1] == 't'){ arr[i] = ' '; arr[i+1] = '@'; count++; } } if(i<n-3){ if(arr[i] == 'd' && arr[i+1] == 'o' && arr[i+2] == 't'){ arr[i] = ' '; arr[i+1] = ' '; arr[i+2] = '.'; } } } for(int i = 0;i < n;++i){ if(arr[i] != ' ') result += arr[i]; } return result; } }
提交结果:
题目四、
4、题目名称:最长递增的区间长度 给一个无序数组,求最长递增的区间长度。如:[5,2,3,8,1,9] 最长区间 2,3,8 长度为 3
解题思路:
遍历给定区间长度的数组,如果有序就累加地记录下来,无序就归零,最终将记录数值的历史最高输出,便是最长递增区间。
提交代码:
import java.util.ArrayList; import java.util.Scanner; class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str_0 = scan.nextLine().trim(); int n = Integer.parseInt(str_0); String str_1 = scan.nextLine(); String[] line_list_1 = str_1.trim().split(" "); ArrayList<Integer> arr = new ArrayList<>(); for(int i = 0; i < line_list_1.length; i++){ arr.add(Integer.parseInt(line_list_1[i])); } scan.close(); int result = solution(n, arr); System.out.println(result); } public static int solution(int n, ArrayList<Integer> arr){ if(n == 0) return 0; if(n == 1) return 1; int result = 0; int count = 0; for(int i = 1;i < n;++i){ if(arr.get(i) >= arr.get(i-1)){ count++; }else{ count = 0; } if(count + 1 >= result){ result = count + 1; } } return result; } }
结果:
总结
总的来说,这次编程竞赛的题目并不难,即使对于我这种小白选手,也是有能力得到满分的,就是用时比较久,且最终发挥的成绩没有达到预期。
有得有失,这次编程竞赛的经历让我有所进步,希望自己能再接再厉,变得更加强大吧....
贵在坚持: