三道机试题
2017-07-10 00:00
134 查看
摘要: 参加机试了,题目记得不太清楚了,后两题不是所有用例全都通过了。敬请参考
第一题 水仙花数
水仙花数是指一个 n 位正整数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。
例如:153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 *3
求所有三位数中的水仙花数。
输出要求:
第1个水仙花数:
...
水仙花数总和为:
参考代码:
第二题:密码破解
题目的意思就是 输入字符串,为".-#"的组合,为密码串,将密码串进行翻译
"."代表1,-代表 0 , # 为多个字符的分隔符(多个#号代表为一个)。
将输入的字符串转换为对于的字母,对于关系如下
0对应F 1对应G 2 对应R 3对应S
...(中间太多了,看switch语句中的对应关系即可)
输入: --.####.###-..
输出: GGS
参考代码:
第三题:查找循环调用
判断函数之间的调用关系是否为循环调用,例如 A调用B, B调用C, C调用A; AB为循环调用。
A调用B,B调用A,则AB也称为循环调用。
输入信息,输入一个数字n,表示后面有n个调用关系,第二行到第n+1行为调用关系,第n+2行为判断的两个函数。
输出信息:T(表示循环调用),F(表示不是循环调用)
输入:3(几个调用关系)
A B
B C
C A
A B
输出:T
参考代码:
第一题 水仙花数
水仙花数是指一个 n 位正整数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。
例如:153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 *3
求所有三位数中的水仙花数。
输出要求:
第1个水仙花数:
...
水仙花数总和为:
参考代码:
public class Main { public static void main(String[] args) { int[] num = new int[20]; int k = 0; for (int i = 100; i < 1000; i++) { int a = i / 100; int b = i % 100 / 10; int c = i % 100 % 10; int count = (a*a*a) + (b*b*b) + (c*c*c); if(count == i){ num[k] = i; k++; } } int sum = 0; for(int i = 0 ; i < k ; i ++){ System.out.println("第" + (i+1) +"个水仙花数: " + num[i]); sum = sum + num[i]; } System.out.println("水仙花数总和为: " + sum); } }
第二题:密码破解
题目的意思就是 输入字符串,为".-#"的组合,为密码串,将密码串进行翻译
"."代表1,-代表 0 , # 为多个字符的分隔符(多个#号代表为一个)。
将输入的字符串转换为对于的字母,对于关系如下
0对应F 1对应G 2 对应R 3对应S
...(中间太多了,看switch语句中的对应关系即可)
输入: --.####.###-..
输出: GGS
参考代码:
public class er { private static char intToChar(int n){ char ch = 0; switch(n){ case 0: case 17: ch = 'F'; break; case 1: ch = 'G'; break; case 2: ch = 'R'; break; case 3: ch = 'S'; break; case 4: ch = 'T'; break; case 5: ch = 'L'; break; case 6: ch = 'M'; break; case 7: ch = 'N'; break; case 8: ch = 'O'; break; case 9: ch = 'P'; break; case 10: ch = 'Q'; break; case 11: ch = 'W'; break; case 12: ch = 'X'; break; case 13: ch = 'Y'; break; case 14: ch = 'Z'; break; case 15: ch = 'U'; break; case 16: ch = 'A'; break; case 18: ch = 'H'; break; case 19: ch = 'I'; break; case 20: ch = 'J'; break; case 21: ch = 'K'; break; case 22: ch = 'B'; break; case 23: ch = 'C'; break; case 24: ch = 'D'; break; case 25: ch = 'E'; break; case 26: ch = 'l'; break; case 27: ch = 'm'; break; case 28: ch = 'n'; break; case 29: ch = 'o'; break; case 30: ch = 'p'; break; case 31: ch = 'i'; break; case 32: ch = 'j'; break; case 33: ch = 'k'; break; case 34: ch = 'f'; break; case 35: ch = 'g'; break; case 36: ch = 'h'; break; case 37: ch = 'a'; break; case 38: ch = 'b'; break; case 39: ch = 'c'; break; case 40: ch = 'd'; break; case 41: ch = 'e'; break; case 42: ch = 'q'; break; case 43: ch = 'r'; break; case 44: ch = 'w'; break; case 45: ch = 'x'; break; case 46: ch = 'y'; break; case 47: ch = 'z'; break; case 48: ch = 's'; break; case 49: ch = 't'; break; case 50: ch = 'u'; break; case 51: ch = 'v'; break; } return ch; } public static void main(String[] args) { Scanner sin = new Scanner(System.in); if(sin.hasNext()){ String input = sin.nextLine(); String[] point = input.split("#"); if(point.length == 0 ){ System.out.println(" "); } StringBuffer result = new StringBuffer(); int count = 0; char[] res = new char[point.length]; for (int i = 0; i < point.length; i++) { for (int j = 0; j < point[i].length(); j++) { if(point[i].charAt(j) == '-'){ result.append('0'); }else if(point[i].charAt(j) == '.'){ result.append('1'); } } String num = result.toString(); count= Integer.parseInt(num,2); if(count < 0 || count > 52){ System.out.println("ERROR"); break; } res[i] = intToChar(count); result = new StringBuffer(); } for (int i = 0; i < res.length; i++) { System.out.print(res[i]); } } } }
第三题:查找循环调用
判断函数之间的调用关系是否为循环调用,例如 A调用B, B调用C, C调用A; AB为循环调用。
A调用B,B调用A,则AB也称为循环调用。
输入信息,输入一个数字n,表示后面有n个调用关系,第二行到第n+1行为调用关系,第n+2行为判断的两个函数。
输出信息:T(表示循环调用),F(表示不是循环调用)
输入:3(几个调用关系)
A B
B C
C A
A B
输出:T
参考代码:
import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class san { private static char isTrue(String result , String[] input){ char end = 'F'; Map<String, String> mapList = new HashMap<>(); String[] results = result.split(" "); for (int i = 0; i < input.length; i++) { String[] spli = input[i].split(" "); mapList.put(spli[0], spli[1]); } StringBuffer su = new StringBuffer(); String in = results[0]; for (int i = 0; i < mapList.size(); i++) { su.append(mapList.get(in)); in = mapList.get(in); } String res = su.toString(); if(res.contains(results[0]) && res.contains(results[1]) ){ if(res.indexOf(results[0]) > res.indexOf(results[1])){ end ='T'; } } return 'T'; } public static void main(String[] args) { Scanner sin = new Scanner(System.in); int N = 0; while(sin.hasNext()){ N = Integer.parseInt(sin.nextLine()); String[] input = new String ; for (int i = 0; i < input.length; i++) { input[i] = sin.nextLine(); } String result = sin.nextLine(); System.out.println(isTrue(result, input)); } } }
相关文章推荐
- 三道baidu试题
- [蓝桥杯历届试题] 汉诺塔计数
- 历年系统架构设计师考试之设计模式试题-2012年
- 华为机试题(地铁换乘,图的应用)
- 2011蓝桥杯【初赛试题】歌赛新规则
- 蓝桥杯2010年试题
- Linux知识点与试题
- 华为机试题_输出一列数据的最大/最小值之和(重点在输入输出)
- C++并发实战:面试题4:生产者消费者试题blocking queue
- 2013年编程之美资格赛试题--传话游戏
- C++/C试题
- 2005年Baidu笔试试题及参考答案
- 2014蓝桥杯B组初赛试题《切面条》
- 华为校园招聘上机试题Java实现(一)
- 面试试题
- 腾讯2014软件开发职位校园招聘笔试试题
- 蓝桥杯练习vip试题 高精度加法
- [再寄小读者之数学篇](2014-04-18 from 352558840@qq.com [南开大学 2014 年高等代数考研试题]特征多项式的互素分解)
- [再寄小读者之数学篇](2014-04-20 [苏州大学数学专业考研复试试题] 解析函数有特定表达式的一个充分条件)
- 线程试题二