【CSDN编程竞赛 第六期】我的第一场编程竞赛。

在这里插入图片描述

CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16

第一场编程竞赛

前言

这是我第一次接触CSND的编程竞赛,一周前看到有这么个活动,觉得很有意思,就报名了。
我是最近才开始在CSDN上发表博客,记录自己的学习,也是最近才开始刷题,所以对于此次竞赛,可以说是没有一点信心,只当是一次尝试。

大赛简介

> 提示:可图文并茂简单介绍大赛相关参赛时间/主办方/含金量等。

在活动页面报名之后,在比赛开始时间进入答题就可以了,一共是四道编程题,满分100分。

活动时间:9月8日-21日(竞赛时间截止9.18)

竞赛考试时间:9月18日 8:30-11:00(作答时间2小时)

参与方式
1、9月18日 11:00前点击比赛报名,并于9月18日 8:30—11:00,PC端登陆考试系统(当前页面届时将开放考试入口),在2小时内完成考试作答

2、9月8日-9月21日,点击竞赛专属话题,在对应的模板编辑器里发稿成功即参与成功
活动内容
1、竞赛:满分100分,4道编程题,编程题可使用Java、C、C++、C#、Python、JavaScript、lua、go等编程语言

2、征文:参与话题文章创作,内容创作方向需围绕竞赛相关,如以往参加各类编程竞赛的比赛经历,本次竞赛的bug,对CSDN竞赛的建议等等,具体以创作模板为准,字数≥800(包含代码)

具体规则可以点击链接查看详情:

CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16

参赛流程

比赛过程就很朴素了,只要按照规则来,尽量不切屏,不复制粘贴考试页面外的文字进来,基本上不会被判定为有作弊嫌疑。
规定时间(两小时)内完成作答,提交即可。

参赛经历

我在赛前基本没有做过什么准备,最近在坚持刷LeetCode题应该对适应做题的感觉有所帮助的,单刷题并不是为了准备这场竞赛,哈哈。
作答的两个小时,我在最后三分钟才提交,速度不快,答对了三道题,有一道题错了,很可惜,实际上在最后半小时里,错误的题目已经被我提交并通过了,就是不知道为什么交卷后,作答报告中拿到最终通过的题目代码显示的是先前答错的部分,错失25分。
不过没关系,自己知道自己的水平在哪里就行了,这次的经验只会让我更加谨慎与优秀。

更新于2022年9月24日晚8点
又看了一下竞赛地结果,发现原本可能因为bug丢失的分数又回来了,货真价实的100分,哈哈哈,其实也是很幸运的,这次竞赛的题目不算难,很多大佬多是满分,而且用时很短,但是能得到满分我是十分激动的,来看看我的排名和分数截图吧!

在这里插入图片描述
哈哈,用时非常接近竞赛活动的2小时限制,所以连前百都进不去,第108名,但是满分就是豪横!
求点赞求点赞求点赞
重要的事情说三遍,哈哈。


解题思路

题目一、

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;
}
}

结果:

在这里插入图片描述

总结

总的来说,这次编程竞赛的题目并不难,即使对于我这种小白选手,也是有能力得到满分的,就是用时比较久,且最终发挥的成绩没有达到预期。
有得有失,这次编程竞赛的经历让我有所进步,希望自己能再接再厉,变得更加强大吧....

贵在坚持:在这里插入图片描述

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.29.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值