农行笔试编程题(Java)记录
记录农行暑期实习生Java编程题
(1)第一题:
火星人用三进制数表示数据,他们的数字符号:@、$、&这三个符号分别表示0、1、2。 现在输入一个十进制数,请把它用火星的三进制数表示出来。
例如:输入值:num = 123 输出值:"$$$&@"
public class Solution {public String triCoding(int num) {/*思路:1.输入十进制首先把十进制转换成三进制2.对得到的三进制数转换成String或者StringBuilder类型,进行火星文替换*///1.输入十进制首先把十进制转换成三进制int temp;int count = 1;int ref = 0;while(num != 0) {temp = num % 3;//十进制转三进制为十进制数除以3取余num = num / 3;ref = ref + temp * count;count *= 10;}//2.对得到的三进制数转换成String或者StringBuilder类型,进行火星文替换StringBuilder sb = new StringBuilder();sb.append(ref);for(int i = 0;i < sb.length();i++){if(sb.charAt(i) == '0'){sb.setCharAt(i,'@');}if(sb.charAt(i) == '1'){sb.setCharAt(i,'$');}if(sb.charAt(i) == '2'){sb.setCharAt(i,'&');}}return sb.toString();}//以下为测试类@Testpublic void test1(){Solution s = new Solution();String s1 = s.triCoding(123);System.out.println(s1);}
}
控制台输出结果:
(2)第二题:
利用一个包含n(n>1)个整数数字构成的字符串作为秘钥对明文进行加密,加密方式规则如下:
- 1.从左到右每次从秘钥中取出一个数字字符,得到该字符的数字值K,若到达秘钥的最后则从头开始取
- 2.对明文中的字符按照从左到右的顺序进行加密:
偶数位置的字符加上K后得到加密后的字符
奇数位置的字符减去K后得到加密后的字符
- 3.如果第二步中加上或减去K后超过了字母的编码范围,则利用模运算调整到字符的编码范围内
这里第三点要求没有搞明白,实在是不知道怎么才能用模运算调整编码范围。。。希望有大佬可以评论指正。
注意:
(1)本题中需要加密的字符串中仅包含小写字母
(2)字符串的首位位置序号为0,即为偶数位
- 例如: plaintext=“hello” key=“234137”
- 输出结果:“jbpkr”
public class Solution {public String encryption(String plaintext,String key) {int temp;StringBuilder result = new StringBuilder(plaintext.length());result.append(plaintext);for (int i = 0;i < plaintext.length();i++) {char c = key.charAt(i % key.length()); //从左到右每次从秘钥中取出一个数字字符,得到该字符的数字值K,若到达秘钥的最后则从头开始取if (i % 2 == 0) { //偶数位temp = (int) (plaintext.charAt(i)) + c;if (temp > 122) { //这里偶数位是加法运算,所以只有可能相加之后的ASCLL值大于'z'的ASCLL值,因此不用考虑小于'a'的情况char temp1 = (char) (temp - 48);result.setCharAt(i, temp1);}else { //这里的else主要指的是相加之后的ASCLL值还处在'a'~'z'之间char temp1 = (char) temp;result.setCharAt(i, temp1);}}else { //奇数位temp = (int) (plaintext.charAt(i)) - c;if (temp < 97) { //这里奇数位是减法运算,所以只有可能相减之后的ASCLL值小于'a'的ASCLL值,因此不用考虑大于'z'的情况char temp1 = (char) (temp + 48);result.setCharAt(i, temp1);}else { //这里的else主要指的是相减之后的ASCLL值还处在'a'~'z'之间char temp1 = (char) temp;result.setCharAt(i, temp1);}}}return result.toString();}//测试用例@Testpublic void testEncryption(){Solution solution = new Solution1();String encryption = solution1.encryption("hello", "234137");System.out.println(encryption);}
}
控制台输出结果:
(3)第三题:
香农提出了信息熵解决了信息的度量问题。他认为一个问题不确定性越大,要搞清楚这个问题,所需要信息量就越大,其信息熵也就越大。
H(x)=−∑ p(x)logp(x)
香农给出的信息熵的公式分三步:
① 首先以每个类别出现的概率值P(x)乘以P(x)的对数值
② 然后对所有类别进行求和
③ 最后取和的相反数
例如:一个房间中有6个男人和4个女生,现在从房间里随机出来1个人,问这个人是男生还是女生?
要解决这个问题需要的信息熵计算如下:
H(x)=-[(6/10)*log(6/10) + (4/10)*log(4/10)]=0.97
现在需要计算一个字符串序列(包含’A’,‘B’,‘C’,'D’四种字符,每种字符若干个),随机选择一个字符,确定这个字符所需要的信息量。
注意:返回结果最多保留两位小数。
eg. 输入值:content=“AABB”,返回值:1.0
public class Solution {public float compute_Entropy(String content) {float H = 0f;//用hashmap来存储,因为hashmap的key具有不可重复性,所以即使有多个相同的字符,也只能被添加一次Map<Character,Integer> map = new HashMap<>();//统计每个字符出现的次数,每个字符出现的概率为 countfor (int i = 0;i < content.length();i++){int count = 0;for (int j = 0;j < content.length();j++){if (content.charAt(i) == content.charAt(j)){count++;}}map.put(content.charAt(i),count); //用hashmap来存储,key = 字符 value = 每个字符出现的次数}//计算每个字符的概率//使用一个List来存储每个字符出现的概率,List可重复,有序,方便使用get函数来查询List<Float> probability = new ArrayList<>();for (int i = 0;i < map.size();i++){//每个字符出现的概率 = 每个字符出现的次数 / 不同字符种数float temp = (float) map.get(content.charAt(i)) / (float) content.length();probability.add(temp);}//计算信息熵for (int i = 0;i < map.size();i++) {float temp = probability.get(i);//使用Math类的log函数,log函数本身是以e为底,结合换底公式实现log以2为底H -= temp * (Math.log(temp)/Math.log((float)2));}return H;}@Testpublic void test1(){Solution s = new Solution();float result = s.compute_Entropy("AABB");System.out.println(result);}
}
控制台输出结果:
农行笔试编程题(Java)记录相关推荐
- 经典笔试编程题--Java实现
转载自 经典笔试编程题--Java实现 1.输入一个正数n,输出所有和为n的连续正数序列. 分析:设定两个指针,min指向和为n的连续正数序列的最小值,max指向和为n的连续正数序列最大值.sum ...
- 2018 完美世界校招笔试编程题(Java)
01背包简单题,只不过要用Java写,写了比较久一点 import java.util.Scanner; public class Main {public static void main(Stri ...
- 网易笔试编程题java_2017年网易校招笔试JAVA研发编程题
为什么80%的码农都做不了架构师?>>> 尝试挑战了下网易2017校招的笔试编程题,共三题,AC第一题,第二题思考了很久勉强用一种low逼的方式完成,第三题没有完成,希望路过的ACM ...
- 魔法币 java_网易2018校招笔试编程题-魔法币 java实现
魔法币 原题 小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币. 魔法机器1:如果投 ...
- java常见笔试编程题(一)
java常见笔试编程题(一) 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串.但是要保证汉字不被截半个,例如"人abc",应该截为"人ab& ...
- 农行2021计算机专业面试题,【面经】2021 中国农业银行 笔试编程题
[面经]2021 中国农业银行 笔试编程题 2020年09月01日 | 萬仟网科技 | 我要评论 微信搜索:编程笔记本.获取更多干货!微信搜索:编程笔记本.获取更多干货!点击上方蓝字关注我,我们一起学 ...
- 美团点评2017秋招笔试编程题
美团点评2017秋招笔试编程题 1, 大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步.求玩家走到第n步(n<=骰子最大点数且是 ...
- 2020哔哩哔哩校招后端开发笔试编程题总结
2020哔哩哔哩校招后端开发笔试编程题总结 1.给定一个正整数N,试求有多少组连续正整数满足所有数字之和为N? (1 <= N <= 10 ^ 9) 暴力求解法: package Day4 ...
- 西安交通大学915考研--编程题Java代码踩坑(2020年真题)
西安交通大学915考研–编程题Java代码踩坑(2020年真题) 目录 西安交通大学915考研--编程题Java代码踩坑(2020年真题) 2020.1--寻找方程组的解 2020.2--几组数中筛选 ...
- 大厂offer?拿来吧你!网易有道笔试编程题特辑
联系我们:有道技术团队助手:ydtech01 / 邮箱:ydtech@rd.netease.com 欢迎应届生同学们 来到2022年校招运动会 现在迎面向你们走来的 是网易有道代表队! (传送门:ht ...
最新文章
- python爬取微博指定内容_python3.5爬虫-爬取微博某博主微博内容
- 第十二章 支持向量机-机器学习老师板书-斯坦福吴恩达教授
- Redis-15Redis基础配置文件
- 20155330 《信息安全系统设计基础》课程总结
- C++基础学习(02)--(数据类型,变量类型,变量作用域,常量,修饰符类型)
- citrix 产品上线
- QQ 20周年 腾讯把经典提示音“嘀嘀嘀嘀”做成了一首歌!
- 前妻捐赠一半财产做慈善 世界首富贝佐斯发推文称赞
- linux修改时区不用重启服务,Linux修改时区不用重启的方法
- 电源大师课笔记 1.2
- IEEE1588 同步机制
- LCS算法 文本对比的实现
- 网页上带有图片的输入框
- redis的几种常见客户端
- 制造业案例|数据效率提升近90%,敏实借助瓴羊DAAS体系结构加速数字化转型
- JavaScript 千分位 货币格式化
- loadrunner入门教程(10)--代理录制
- 服务器修改了 金碟软件用不到,金蝶软件金蝶软件KIS系统客户端连接服务器时,有时会有连接不上的情况,提示服务器不是有效的,请重新设置...
- 简单认识一下mbedTLS
- cs服务器维护时间,CS服务器建设简明手册