【CSDN编程挑战赛第六期—参赛体验+思路】

CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16
(请不要删掉此地址)

前言/背景

第一次参加这种类似于编程的比赛,尽管之前一直都听说,在算法世界里的各种比赛,但是一直都没那个计划参加。就我参加了这次CSDN编程竞赛第6期而言,整体比赛还是比较对于编程小白来说比较友好。

大赛简介

主办方为CSDN举办的比赛,并且是第六届。

参赛流程

满分:100
限时:2h(只要你在规定考试时间进去,就拥有两个小时的答题时间)

先报名,成功输入自己的手机号和姓名,然后等到了规定比赛的时间,进入比赛,然后答题,在规定的时间完成答题,最后交卷。然后统一有系统评分,可能刚开始系统改分机制没那么迅速,需要等一会儿,也有可能是为了照顾那些晚了一点点时间的考生,因为考试需要排名,要全部考生统一答完题才会有排名结果,这个出成绩时间很快的。

参赛经历

这次比赛并没有进行过多的准备,之前想着就来体验一把,然后刚刚好这个比赛是在星期天的上午,不是办公日所以有时间,所以啥也没有准备,周日起床也是一个艰难的过程。以下是我这次比赛的基本情况。

在这里插入图片描述

解题思路

题目一:X国最近开始严管枪火。 像是“ak”,“m4a1”,“skr”。都是明令禁止的。 现在小Q查获了一批违禁物品其中部分是枪支。
小Q想知道自己需要按照私藏枪火来关押多少人。 (只有以上三种枪被视为违法)

该题我的解题思路是:
1.先输入n,代表检查物品的数量,这些物品中可能含有枪支。
2.然后定义一个空的列表,循环n次,每次循环在列表中放入一个物品,就得到了n个物品的列表。
3.最后定义一个函数,目的是判断所有物品列在这[“ak”,“m4a1”,“skr”]列表中出现多少次,返回数值。
ps:讲一下类里面的这个函数
a.定义[“ak”,“m4a1”,“skr”]为列表a,
b.然后循环这个列表,判断a列表中每一个元素在物品列表出现的次数
c.最后累加这个结果,直到循环结束。

代码如下:

class Solution:
	def __init__(self):
		pass
def solution(self, n, vector):
	weijin=["ak","m4a1","skr"]
	result = 0
	for a in weijin:
		if a in vector:
			result = result + vector.count(a)
	return result
if __name__ == "__main__":
	n = int(input().strip())
	vector = []
	for i in range(n):
		vector.append(input().strip())
	s = Solution()
	result1 = s.solution(n, vector)
	print(result1)

题目二:鬼画符门,每年都会统计自己宗门鬼画符消耗的数量,往年一直是大师兄管理, 但是这次鬼艺接手了, 你能帮鬼艺写一个程序统计每年消耗数量最多的鬼画符吗?

解题思路:
1.这题考的是我们对字典的使用,因为每一类鬼画符和出现的次数都是需要一一对应,所以他们是一个键值对。
2.先输入n,,然后将所有鬼画符都放入一个空的列表vector中
3.然后定义一个鬼画符的空字典,循环所有物品的列表,如果物品不在字典里,该字典物品的值为1,在就加1,就可以得到物品和数量的键值对。
4.最后从最大值中取该物品的名称即可。
该题解题思路和第一题类似,我的代码如下:

class Solution:
	def __init__(self):
	pass
def solution(self, n, vector):
	result = None
	guihuafu = {}
	for i in vector:
		if i not in guihuafu:
			guihuafu[i] = 1
		else:
			guihuafu[i] += 1
	temp = max(guihuafu.values())
	for k,v in guihuafu.items():
		if v==temp:
			result = k
	return result
if __name__ == "__main__":
n = int(input().strip())
vector = []
for i in range(n):
	vector.append(input().strip())
s = Solution()
result = s.solution(n, vector)
print(result)

题目三:已知字符串str,str表示邮箱的不标准格式。 其中”.”会被记录成”dot”,”@”记录成”at”。 写一个程序将str转化成可用
的邮箱格式。(可用格式中字符串中除了开头结尾所有”dot”,都会被转换,”at”只会被转化一次,开头结尾的不转化)

在这里插入图片描述
所有题目这道题没做出来,主要还是我练习得不够,刷题刷的太少了,完全都是在凭借着主观意识答题。后面仔细想了一下,这应该就是用判断就可以做出来。
解题思路‘
1.首先输入一个字符串
2.然后将这个字符串中所有的doc用.替代,所有的at用@替代
3.最后开头或者结尾的@和.全部
代码如下:

import re
class Solution:
	def __init__(self) -> None:
		pass
	def solution(self, str):
		result = None
		result = str.replace("doc",".")
		result = str.replace("at","@")
		if result[0] =="." or result[-1]=".":
			if result[0] =="." and  result[-1]!=".":
				result= result.replace(result[0] ,"dot")
			elif result[0] !="." and  result(-1)==".":
				result= result.replace(result[-1] ,"dot")
			else:
				result= result.replace(result[0] ,"dot")
				result= result.replace(result[-1] ,"dot")
		if 	result[0] =="@" or result(-1)=="@":
			if result[0] =="@" or result(-1)!="@":
				result= result.replace(result[0],"at")
			elif result[0] !="@" or result(-1)=="@":
				result= result.replace(result[-1],"at")
			else:
				result= result.replace(result[0],"at")
				result= result.replace(result[-1],"at")
		return result
if __name__ == "__main__":
	str = input().strip()
	s = Solution()
	result = s.solution(str)
	print(result)

题目四:给一个无序数组,求最长递增的区间长度。如:[5,2,3,8,1,9] 最长区间 2,3,8 长度为 3

感觉这题用C++会简单很多(先贴源代码,后续我会出一个python版本的)
代码如下

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
int solution(int n, std::vector<int>& vec){
	int result = 0;
	int count=1;
	if (n==1)
	return 1;
	for(int i = 0; i<n-1; i++){
		if(vec[i]<vec[i+1]){
			count ++;
		}
		else
			count = 1;
		if (count > result)
			result = count;
	}
	return result;
}
int main() {
	int n;
	std::vector<int> vec;
	std::cin>>n;
	std::string line_0, token_0;
	getline(std::cin >> std::ws,line_0);
	std::stringstream tokens_0(line_0);
	while(std::getline(tokens_0, token_0, ' ')){
		vec.push_back(std::stoi(token_0));
	}
	int result = solution(n,vec);
	std::cout<<result<<std::endl;
	return 0;
}

经验心得

在我想象当中,如果非要专心准备一个比赛的话,像我这样的心态肯定不好,所以我给出如果下次我要参加类似于这种编程大赛的几点建议:
1.熟练自己的编程基础语法;
2.在线下多练习算法题,最好将各种奥数题,都写个脚本跑一下
3…保持思维灵活,多练习一下公务员考试的行测题(言语可以不练,重点在数量关系和推理判断)

资料分享

欢迎大家关注我的博客:https://editor.csdn.net/md/?articleId=126920547

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值