Java B组蓝桥杯第八届国赛:小计算器_蓝桥杯能不能用计算器(2)

一、网安学习成长路线图

网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、网安视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。

这也不知道是哪位人才出的题,浪费我一天时间,各种测试,各种找其他博主的代码,(10个代码9个不通过,他们大多就是通过了样例,然后说这个题没啥难度,测试全是运行错误)终于找到一个c++的代码在网站上测试成功之后,开始努力看代码,强行把c++一对一换成java之后,又对比之前的代码找自己的出错的问题,终于测试通过了。(不想承认又不得不承认自己水平很低)

这一届国赛题看贴吧里有各种吐槽的,做个两道多就是国二。我发现这一年的题并不是很难,只是因为出题人语文太好,出的题目逻辑不通,几乎每道题都玩一些文字游戏,完全是看运气,谁能和出题人想到一块,谁就能很容易做出来。

下面说一下这个题目需要注意的地方,也是我疑惑的地方:

(1)题目的NUM指令参数X:“X为一个只包含大写字母和数字的字符串”,是类似“10AB43”这样的数。

由于样例输入也没给出特殊实例,谁能想到是类似“10AB43”这样的数,大写字母和数字掺杂,想想那些参赛的考生做题,还没法测试。没看出来这个点,这题就凉了。(我一开始以为是101B,4654O,329D,51H,类似这样的末尾带进制标识符,因为题目没有规定初始进制状态!!!),(不知道正在看这里的你有没有相同的感受,不会就我自己这么菜吧)

(2)题目的进制转换指令’CHANGE K’,(这里又是一个小坑,被我踩进去了),将当前进制转换为k进制。这句话没毛病,值得注意的是,整个程序中用到的进制,是同一个进制,不管是当前主数字的进制,还是运算时另外一个数字的进制,还是输出的进制,全都是一个进制,简单的来讲就是设置一个全局变量int通用就完事了。
(3)如果你已经会了上面两个点,那就可以来看第三个点:那个X,就是又含大写字母又含数字的X,它要参与计算首先得转成数字,那怎么转成数字呢?题目中已经告知了AZ代表1036,为了方便说明,我这里用上面提到的一个例子“10AB43”来解释。

正常人的思路会想到直接将A替换成10,B替换成11,得到10101143,看似没毛病,样例输入没有这样的例子,所以程序写成这样样例测试没毛病。

考试的话再一次凉凉,这道题一分没有。因为服务器系统测试里可不会有样例输入。废话好像扯太多了,抱歉,我今天太想吐槽。

哈哈,好了,言归正传,我们来看10AB43怎么换:

正确操作:不管是字符串,还是数字,它们每一个占一位,如果是大写字母对应两位数,但它们的权值是共用的,所以

结果 =  值 x  权值

我们从左往右开始分析每一位,为了方便我计算偷懒,咱就先假设当前的进制10进制。

1——>1x1e5=1x100000=100000

0——>0x1e4=0x10000=0

A——>10x1e3=10x1000=10000

B——>11x1e2=11x100=1100

4——>4x1e1=4x10=40

3——>3x1e0=3x1=3

最后加到一起10AB43——>111143,这时候在对比一下直接换字母的结果10101143,#%¥#%@#%¥&(我就问谁能想到…)

那如果你拥有了以上三点,可以来测试如下例子,应该是可以成功的。

蓝桥杯练题系统第一个测试

输入:

23
CLEAR
NUM 281659794
ADD
NUM 1722405514
MOD
NUM 660145688
EQUAL
DIV
NUM 19821154
MUL
NUM 922337202603578091
EQUAL
SUB
CHANGE 31
NUM ABO16DF
SUB
NUM 3LJI76O4
ADD
NUM 25RAC4GA
SUB
NUM IPA0SG0J
MOD
NUM 21Q75TT

输出

23628244
922337202603578091

(4)害,还有最后一点,就是重置命令CLEAR,说的是清除当前数字,就是不存在,是空的,程序里写的话就是不能用它参与下次计算,除非赋予新值。

我这坑又掉进去了,这题专门就适合坑我。如果单纯的将当前数字置0,置-1,那它就会参与下次计算的,然后就乱套了,0分走起…

这里有两个方式处理,在代码注释中解释了很详细,结合之后应该很容易理解。

测试网址:https://www.dotcpp.com/oj/problem1844.html

来看代码:

import java.util.Scanner;

public class Main {
	long num1 = 0;//主要参数
	long num2 = 0;//辅助计算的参数
	int jinzhi = 10;//进制默认10
	int op = 0;//运算操作,用数字代替字符串比较,简化操作,节约开销,不用也行
	public Main() {
		Scanner sn = new Scanner(System.in);
		int n = sn.nextInt();//n次
		//循环处理每条命令
		for (int i = 0; i < n; i++) {
			//把命令变成字符数组,简化字符串比较
			char[] s = sn.next().trim().toCharArray();
			if (s[0] == 'C' && s[1] == 'L') {
				/* 这里需要讲一下,重置指令,题目中描述清除当前的数字,就是不存在了,置空,不要置0或置-1
				 *.因为测试中有个坑,比如:ADD指令后接一个CLEAR
				 *.如果在这里简单的将当前数字置0,整个程序就乱套了,这个0会和一个数进行ADD运算
				 *.显然程序不会报错,但答案不对的
				 *.这里两种方式:一个是你真的把当前数字清除了,就是添加一个变量标记,表示当前数字无法使用
				 *.第二个就是把运算命令清除,显然这个运算命令不参与计算,改成不相关的任意值即可,我这里是置0
				 * */
				op=0;
			} else if (s[0] == 'N') {//给一个数
				//先换成10进制数
				long n1 = change_X_10(jinzhi, sn.next().trim());
				if (op!=0) {
					num2 = n1;// 赋给参与计算的第二个数
					calculate();//计算
				} else {
					num1 = n1;//赋给主要参数
				}
			} else if (s[0] == 'A') {//加
				op = 1;
			} else if (s[0] == 'S') {//减
				op = 2;
			} else if (s[0] == 'M' && s[1] == 'U') {//乘
				op = 3;
			} else if (s[0] == 'D') {//除
				op = 4;
			} else if (s[0] == 'M' && s[1] == 'O') {//余
				op = 5;
			} else if (s[0] == 'C' && s[1] == 'H') {//设置进制
				/*
				 * .可以看到这里只是简单的换了一下进制的参数,而没有对主要参数num1进行转换
				 * .因为对系统测试而言,他只看输出,因此在输出时,转一下进制给机器看。
				 * .对我们自己而言,全部用十进制更方便,不需要模拟进制转换进行计算,用了更麻烦,还没用
				 * 
				 */
				jinzhi = sn.nextInt();
			} else if (s[0] == 'E') {//输出,利用Long自带的进制转换
				System.out.println(Long.toString(num1,jinzhi));
			}
		}
		sn.close();
	}

	//计算
	public void calculate() {
		switch (op) {
		case 1:
			num1 += num2;
			break;
		case 2:
			num1 -= num2;
			break;
		case 3:
			num1 *= num2;
			break;
		case 4:
			num1 /= num2;
			break;
		case 5:
			num1 %= num2;
			break;
		default:
			break;
		}
		op = 0;
	}
/*
 *. 例:10AB43
 * 100000
 * 00000
 * 10000
 * 1100
 * 40
 * 3
 * 111143
 * 
 * */
	//将任意进制转换成10进制
	public long change_X_10(int j, String s) {
		long n1 = 0;
		int l=s.length();
		//遍历每一位
		for (int i = l - 1; i >= 0; i--) {
			long n2 = 1;
			//这里n2用来计算位置获取权值
			for (int k = 1; k <= l- i - 1; k++)
				n2 *= j;
			//这里区分数字和大写字母
			if (s.charAt(i) >= '0' && s.charAt(i) <= '9')
				n1 += n2 * (s.charAt(i) - '0');
			else
				n1 += n2 * (s.charAt(i) - 55);//这里简化计算,原式是('大写字母'-'A'+10),用ASCII值简化
		}
		//返回合成的10进制数
		return n1;
	}


	public static void main(String[] args) {


### 如何自学黑客&网络安全


#### 黑客零基础入门学习路线&规划


**初级黑客**  
 **1、网络安全理论知识(2天)**  
 ①了解行业相关背景,前景,确定发展方向。  
 ②学习网络安全相关法律法规。  
 ③网络安全运营的概念。  
 ④等保简介、等保规定、流程和规范。(非常重要)


**2、渗透测试基础(一周)**  
 ①渗透测试的流程、分类、标准  
 ②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking  
 ③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察  
 ④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等


**3、操作系统基础(一周)**  
 ①Windows系统常见功能和命令  
 ②Kali Linux系统常见功能和命令  
 ③操作系统安全(系统入侵排查/系统加固基础)


**4、计算机网络基础(一周)**  
 ①计算机网络基础、协议和架构  
 ②网络通信原理、OSI模型、数据转发流程  
 ③常见协议解析(HTTP、TCP/IP、ARP等)  
 ④网络攻击技术与网络安全防御技术  
 ⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现


**5、数据库基础操作(2天)**  
 ①数据库基础  
 ②SQL语言基础  
 ③数据库安全加固


**6、Web渗透(1周)**  
 ①HTML、CSS和JavaScript简介  
 ②OWASP Top10  
 ③Web漏洞扫描工具  
 ④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)  
 恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k


到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?


如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!


**7、脚本编程(初级/中级/高级)**  
 在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.


如果你零基础入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。

**8、超级黑客**  
 这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。  
 ![img](https://img-blog.csdnimg.cn/img_convert/3fd39c2ba8ec22649979f245f4221608.webp?x-oss-process=image/format,png)


#### 网络安全工程师企业级学习路线


![img](https://img-blog.csdnimg.cn/img_convert/931ac5ac21a22d230645ccf767358997.webp?x-oss-process=image/format,png)  
 如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的

视频配套资料&国内外网安书籍、文档&工具

**需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)**


当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

![img](https://img-blog.csdnimg.cn/img_convert/153b2778a3fe5198265bed9635d63469.webp?x-oss-process=image/format,png)  
 一些笔者自己买的、其他平台白嫖不到的视频教程。  
 ![img](https://img-blog.csdnimg.cn/img_convert/32eb4b22aa740233c5198d3c161b37e8.webp?x-oss-process=image/format,png)



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.youkuaiyun.com/topics/618540462)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值