网易实习笔试
网易笔试第一题, 矩阵中有一些工厂产生污染, 求离污染最远的地方. 曼哈顿距离
第二题, 求数组中一个子集,sum最大同时被6整除.
第三题, 给 T, 给不定长的输入,(这里我为了排序用pripority ) 求最接近T的
#笔试题目##网易#
第二题, 求数组中一个子集,sum最大同时被6整除.
第三题, 给 T, 给不定长的输入,(这里我为了排序用pripority ) 求最接近T的
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int T = Integer.parseInt(in.nextLine());
int y = Integer.parseInt(in.nextLine());
System.out.println(T +y);
String [] ss = new String[10010];
String s = in.nextLine();
ss = s.split(" ");
System.out.println(ss[0]);
Vector<Integer> vt = new Vector<Integer>() ;//怎么是一个有序数组???
PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
for(int i = 0 ; i < ss.length; i ++) {
pq.add(Integer.parseInt(ss[i]));
}
System.out.print(pq.peek());
//怎么遍历啊!!!遍历一个有序数组
while(!pq.isEmpty()) { //find closest num
vt.add(pq.poll());// 获得一个有序数组
}
int i = 0 ;
for(;i< vt.size() && vt.indexOf(i) < T;i++){ }
//找到最接近的大一点点.
int closest;
if(i == vt.size()) {
closest = Integer.MAX_VALUE;// all smaller than T,那就照常处理
}
else {
closest = vt.elementAt(i);
}
if(closest == T) {
System.out.print(T-y);
return;
}
boolean flag = false;
for(int j = i-1; j> 0 ; j -- ) {
// j一定小于T
int temp = vt.elementAt(j);//之前也写indexof了
for(int k = j ;k > 0 ; k --) {
temp += vt.elementAt(k) ;//从最大开始加
if(temp >=T) {
if(temp < closest ) {
closest = temp;
}//更新closest
temp -= vt.elementAt(k);
}
}
}
System.out.print(T-y);
in.close();
} 不定长怎么办?
但是因为sc.nextInt()方法只读取空白符前面的值,会把空白符继续留在缓存区,而sc.nextLine()会把空白符也读取并清除,所以每次用完sc.nextInt()方法最好在后面加个sc.nextLine(),但最好舍弃这个方法,每行都采用sc.nextLine()方法读取。【在这里两个方法混用,提交代码的时候很容易经常出现数组越界的问题】
while(cin>>a){
sum=0;
sum+=a;
while(cin.get()!='\n'){
cin>>a;
sum+=a;
}
cout<<sum<<endl;
} while(scanner.hasNext()){
String s = scanner.nextLine();
String[] array = s.split(" ");
int sum = 0;
for(int i = 0; i < array.length; i++){
sum += Integer.parseInt(array[i]);
}
System.out.println(sum);
} 或者python #不确定输入有多少行,用while循环
import sys seq = [ ] while True: line = sys.stdin.readline().strip() #line此时是字符串列表,并已去掉前后空格 回车符 if line: line = map(int,line.split()) #把line的空格元素去掉,转成字符串列表list,并转成整型int else: break seq += line print(seq)
笔试第四题
给[a, b] 求范围中是回文数同时又 是回文数的三次方的数.
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String start = in.nextLine();
String end = in.nextLine();
//Set<Integer> huiwen = new HashSet<Integer>();
int s = Integer.parseInt(start);
int e = Integer.parseInt(end);// 三次方想不到啊 !!
//找到所有三次方可能在范围中的数.
if(huiwen("9"))
// System.out.println("111");
System.out.print("[");
int count = -1 ;
for(int i = 1 ; i <= Math.sqrt(e) ;i++ ) {
if(huiwen(String.valueOf(i) ) ) {
//huiwen.add(i);
int j = i*i*i;
if( j<= e && j >= s && huiwen(String.valueOf(j))) {
count++;
if(count == 0)
System.out.print(j);// 到底怎么输出啊!!
else
System.out.print(","+j);
}
}
}
System.out.print("]");
in.close();
// Scanner in = new Scanner(System.in);
// Vector<Integer> id = new Vector<Integer>();//不能用int
// Vector<String> old = new Vector<String>();//不能用int
// String line1 = in.nextLine();
// for(int i = 0 ; i < line1.length(); ) {
// String c = line1.substring(i,i+1);
// id.add( Integer.parseInt(c));
}
private static boolean huiwen(String str){
if(str.isEmpty()) return false;
int slow = 0,fast = str.length();
//if first = last
while(slow <= fast){
// System.out.println(str.indexOf(slow));
if(str.indexOf(slow) == str.indexOf(fast)){
slow++;//应该是charAt 我写错了写indexOF了, 好多都写成indexof了
fast --;
}
else{
return false;
}
}
return true;
}
}

查看3道真题和解析