深信服9月1日笔试
编程第一题:翻转字符串,输入:abcdefg b f 输出:afedcbg
编程第二题:public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); String[] subStr = s.split(" "); System.out.println(reverseStr(subStr[0],subStr[1].charAt(0),subStr[2].charAt(0))); } // 这块是截取start---end之间的字符串 public static String reverseStr(String s,char a,char b){ int start = -1; int end = -1; for (int i = 0; i <s.length() ; i++) { if(s.charAt(i)==a){ start=i; } if(s.charAt(i)==b&&start!=-1){ end=i; } } String subStr = s.substring(start,end+1); // StringBuffer是可以存储和操作字符串 StringBuffer sb = new StringBuffer(subStr).reverse(); return s.substring(0,start)+sb+s.substring(end+1,s.length()); }
输入描述: * 输入为一行,n个数字,用空格隔开 * 前面n-1个数字组成,题目中的数组arr * 第n个数字为k * 输出为 我们需要找到的数字 * 输入: 2 1 4 3 6 5 0 7 3 arr=[2 1 4 3 6 5 0 7] k=3(回合数) arr[0]=2 arr[1]=1 赢得数字:2 arr=[2 4 3 6 5 0 7 1] * 输出:6
public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); // 如果数组中有空格,先用String做输入,再转化为字符数组,这样就可以取长度 String[] s = str.split(" "); // 动态数组 List<Integer> list = new ArrayList<>(); for (int i = 0; i <s.length-1 ; i++) { list.add(Integer.parseInt(s[i])); } // k是数组中最后一个数字 回合数 int k =Integer.parseInt(s[s.length-1]); int result = getwinner(list,k); System.out.println(result); } public static int getwinner(List<Integer> list,int k){ // 取前两个中最大的 k是回合次数 int pre = Math.max(list.get(0),list.get(1)); // 回合数是1 if(k==1){ return pre; } // 次数 已经是赢得,所以初始化为 1 int count = 1; int max = pre; // 从第二个开始比较 for (int i = 2; i <list.size() ; i++) { // 当前数 int cur = list.get(i); // 最大数大于当前数,不动,pre的计数加1 if(pre>cur){ count++; if(count==k){ return pre; } }else { // 之前的最大数<当前数,当前数是pre pre = cur; // 重新计数 count = 1; } max = Math.max(cur,max); } return max; }第三题:路径,A1 B1 3| B1 A1 1| B1 C1 4| A1 C1 5| C1 B1 9 输出B1 不会,太难啦