携程 java实习笔试
四道编程题
感觉除了最后一道题,其它题都比较友好,是我太菜了
第一题
给一个字符串,求字符串中0的个数(6,9,0算一个0;8算两个0)
/** 输入: 1234567890 输出: 5 */ import java.util.Scanner; public class Main1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()){ String s=sc.nextLine(); if(s.length()==0){ System.out.println(0); break; } int res=0; int index=0; while(index<s.length()){ char temp=s.charAt(index); if(temp=='6'||temp=='9'||temp=='0'){ res++; }else if(temp=='8'){ res+=2; } index++; } System.out.println(res); } } }
第二题
如果一个数ai,它大于前面i个数,则说明他是一个好数,然后题目给n,k。n代表你需要构造一个多长的输出数组,k代表这个输出数组里面有多少个好数,要求好数之前不相邻(多个结果只输出一个结果就行)
/** 输入: 5 2 输出: 4 1 5 2 3 */ import java.util.Scanner; public class Mian2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int n=sc.nextInt(); int k=sc.nextInt(); int maleft=n-k+1; StringBuilder res=new StringBuilder(); int count=0; for (int i = 1; count<n; i++) { if(maleft<=n){ res.append(maleft+" "); maleft++; count++; } if(count<n){ res.append(i+" "); count++; } } res.substring(0,res.length()-1); System.out.println(res.toString()); } } }
第三题
给一个正整数n(1<=n<=109),要求求出正整数x,y,使得 |x!*y-y-n| 最小。x,y不能为2。
(我的代码只通过了70%,就不贴在这里了)
/** 输入: 44 输出: 3 9 */
第四题
我当时没有思路,所以一点没做,题目也忘了。题目大致就是给了一个树形结构的数据,第一行n代表后面有n行,n行中,每一行,第一个数字代表当前节点,第二个数字代表父节点,第三个数字代表子节点到父节点的权重,要求不存在两条红边交于同一个节点。输出红边最高权重和
/** 输入: 5 2 1 2 1 5 5 3 5 3 4 5 4 5 0 0 输出: 6 */