记录农行暑期实习生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)记录相关推荐

  1. 经典笔试编程题--Java实现

    转载自  经典笔试编程题--Java实现 1.输入一个正数n,输出所有和为n的连续正数序列.  分析:设定两个指针,min指向和为n的连续正数序列的最小值,max指向和为n的连续正数序列最大值.sum ...

  2. 2018 完美世界校招笔试编程题(Java)

    01背包简单题,只不过要用Java写,写了比较久一点 import java.util.Scanner; public class Main {public static void main(Stri ...

  3. 网易笔试编程题java_2017年网易校招笔试JAVA研发编程题

    为什么80%的码农都做不了架构师?>>> 尝试挑战了下网易2017校招的笔试编程题,共三题,AC第一题,第二题思考了很久勉强用一种low逼的方式完成,第三题没有完成,希望路过的ACM ...

  4. 魔法币 java_网易2018校招笔试编程题-魔法币 java实现

    魔法币 原题 小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币. 魔法机器1:如果投 ...

  5. java常见笔试编程题(一)

    java常见笔试编程题(一) 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串.但是要保证汉字不被截半个,例如"人abc",应该截为"人ab& ...

  6. 农行2021计算机专业面试题,【面经】2021 中国农业银行 笔试编程题

    [面经]2021 中国农业银行 笔试编程题 2020年09月01日 | 萬仟网科技 | 我要评论 微信搜索:编程笔记本.获取更多干货!微信搜索:编程笔记本.获取更多干货!点击上方蓝字关注我,我们一起学 ...

  7. 美团点评2017秋招笔试编程题

    美团点评2017秋招笔试编程题 1, 大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步.求玩家走到第n步(n<=骰子最大点数且是 ...

  8. 2020哔哩哔哩校招后端开发笔试编程题总结

    2020哔哩哔哩校招后端开发笔试编程题总结 1.给定一个正整数N,试求有多少组连续正整数满足所有数字之和为N? (1 <= N <= 10 ^ 9) 暴力求解法: package Day4 ...

  9. 西安交通大学915考研--编程题Java代码踩坑(2020年真题)

    西安交通大学915考研–编程题Java代码踩坑(2020年真题) 目录 西安交通大学915考研--编程题Java代码踩坑(2020年真题) 2020.1--寻找方程组的解 2020.2--几组数中筛选 ...

  10. 大厂offer?拿来吧你!网易有道笔试编程题特辑

    联系我们:有道技术团队助手:ydtech01 / 邮箱:ydtech@rd.netease.com 欢迎应届生同学们 来到2022年校招运动会 现在迎面向你们走来的 是网易有道代表队! (传送门:ht ...

最新文章

  1. python爬取微博指定内容_python3.5爬虫-爬取微博某博主微博内容
  2. 第十二章 支持向量机-机器学习老师板书-斯坦福吴恩达教授
  3. Redis-15Redis基础配置文件
  4. 20155330 《信息安全系统设计基础》课程总结
  5. C++基础学习(02)--(数据类型,变量类型,变量作用域,常量,修饰符类型)
  6. citrix 产品上线
  7. QQ 20周年 腾讯把经典提示音“嘀嘀嘀嘀”做成了一首歌!
  8. 前妻捐赠一半财产做慈善 世界首富贝佐斯发推文称赞
  9. linux修改时区不用重启服务,Linux修改时区不用重启的方法
  10. 电源大师课笔记 1.2
  11. IEEE1588 同步机制
  12. LCS算法 文本对比的实现
  13. 网页上带有图片的输入框
  14. redis的几种常见客户端
  15. 制造业案例|数据效率提升近90%,敏实借助瓴羊DAAS体系结构加速数字化转型
  16. JavaScript 千分位 货币格式化
  17. loadrunner入门教程(10)--代理录制
  18. 服务器修改了 金碟软件用不到,金蝶软件金蝶软件KIS系统客户端连接服务器时,有时会有连接不上的情况,提示服务器不是有效的,请重新设置...
  19. 简单认识一下mbedTLS
  20. cs服务器维护时间,CS服务器建设简明手册

热门文章

  1. 登录 Unix 操作系统
  2. Spring源码下载步骤
  3. sqlmap使用教程
  4. python简明教程中文pdf-《python简明教程中文》.pdf
  5. python中printf的用法_python输出语句print的用法是什么?
  6. java64位安装包下载_java64位安装包
  7. Java数据结构之链表的基本操作
  8. Spring Boot对jsp的支持
  9. 0308·付费专栏销售排行榜
  10. Python——查看帮助手册