精华 4月1日笔试后去哪儿大神如期为你做题解
发布于 2017-03-31 16:21 10063 次浏览 6 赞 最后一次编辑是 2017-04-01 21:26 来自 资源分享  

感谢去哪儿的HR、技术GG,答疑如期进行!同学们可以移步题解贴子~

关于考前出现的问题,请到另外一个置顶贴吐槽,这里我们还是和Gibbon聊聊题解


没想到题解会来这么快!考试结束后,立刻马上看题解!


同时!去哪儿技术大神Gibbon将在线解答你的疑惑,考完记得来提问大神哟~



Gibbon

男,全栈工程师,就职于去哪儿神秘事业部

专注打杂、应急和解决各种别人不愿意碰的问题


【题解预告】

时间:4月1日21:05——22:00

大神:Gibbon——去哪儿全栈工程师

内容:

• 关于在线编程题的题解及思路

• 关于去哪儿程序员的成长

• 关于技术的一切问题


4月1日笔试结束后,Gibbon大神带你聪明你的旅行!


-------------------------------------------


为明天的笔试做好准备,现在就刷去哪儿秋招在线笔试编程真题:我们都点这里


86 条回复

登不上去!

2017-04-01 19:03

登不上去啊哟喂我勒个去

2017-04-01 19:05

可以的 取消置顶了呀 


2017-04-01 19:05

登录不进去 属于哪部分没做好?

2017-04-01 19:08

去哪网笔试是愚人节的节目吗,验证码登不进去

2017-04-01 19:10

一直显示验证码错误...

2017-04-01 19:10

琦玉老师!!!

2017-04-01 19:12

登录不进去 属于哪部分没做好?

2017-04-01 19:15
coder_CWHBVXPQ 回复 coder_F9PMBTQ6

登录不进去就是做的好,出现问题登进去了不更麻烦么

2017-04-01 19:16
Gibbon 回复 acmcoderjPH6nooY

今天你做俯卧撑了么?

2017-04-01 19:49
小码快跑 回复 Gibbon

感谢Gibbon大神!

2017-04-01 19:52
小码快跑 回复 acmcoderqIvCj8dw

当时是为了让同学们尽快看到考试延迟的通知,再次向同学道歉!

2017-04-01 19:54
小码快跑 回复 coder_TMCX9WQ7

不是去哪儿的原因,是赛码的错误,很抱歉!

2017-04-01 19:55

这个在哪里看呀?

2017-04-01 20:44

交卷了,坐等老师来解答~

话说js编程题在赛码的webIDE上AC不过,在本地node环境下却能正确输入输出,是因为ES6不支持的原因吗?求不要误判

2017-04-01 20:46
1

我以为只有自己的比赛时间出错了呢。。。比赛的时候一开始就只剩1个小时24分钟了。。。后来好像又变成了一个半小时。。。

2017-04-01 20:52

额。。。迟了十六分钟才成功开始答卷,刚交完卷。感觉今天好坎坷~产品岗的题不算太难,大概是心态有点慌乱了,写的很一般~

2017-04-01 20:53

表示本地编译可以通过,网上编译一个都通不过。很慌,再见了qunar

2017-04-01 21:00
3

哎 一年没写代码了 手好生。。。

2017-04-01 21:00

发现也是 本地变异可以通过。。。网上统统编译错误

2017-04-01 21:01
1

貌似题序不对,

2017-04-01 21:05
acmcoderzGinbPCm 回复 coder_MEWWWUKB

我也是。。。

2017-04-01 21:05

java 输入那一块可以气死好多人,直接输入一个数组,让人自己处理接收;


明明输入一个数组,可以先输入一个长度,再输入内容;


好多OJ都是这样,让别人把时间浪费在输入输出上,

2017-04-01 21:11
1

你看看哪里的问题,本地运行好好的。

l=[]
while True:
    str=raw_input().split()
    if not str:
        break
    l.append(str)
dict={'a': 0, 'c': 2, 'b': 1, 'e': 4, 'd': 3, 'g': 6, 'f': 5, 'i': 8, 'h': 7, 'k': 10,
      'j': 9, 'm': 12, 'l': 11, 'o': 14, 'n': 13, 'q': 16,
      'p': 15, 's': 18, 'r': 17, 'u': 20, 't': 19, 'w': 22, 'v': 21, 'y': 24, 'x': 23, 'z': 25}
for i in l:
    sum=0
    flag=True
    for j in list(i[0]):
        print j
        if j in ['a','b','c','d','e','f','g','h','i','j','k',
                     'l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']:
            sum=dict[j]+sum*26
        else:
            flag=False
            break
    if flag:
        print sum
    else:
        print


2017-04-01 21:11

js在本地输出是正确的,可是复制上来改个输入就不行了,是我对输入输出理解有误吗,难道line不是一行的输入而是全部的输入值?

2017-04-01 21:14

说真的,,输入输出,,,浪费了好多时间

2017-04-01 21:15
1

两地本地都没问题,就是通不过。。。时间全浪费在检查输入输出上了,最终还是没弄出来,心累

2017-04-01 21:17
Gibbon 回复 coder_BRPDA3CG

题目要求输入那个10进制数值,不要求输出每个字符

2017-04-01 21:17

想问一下,第二道题26进制那道,我的代码只通过了80%,但是我想不出来有什么情况会出错?

Scanner sc=new Scanner(System.in);

while (sc.hasNext()){
    String str=sc.next();
    str= str.trim().toLowerCase();
    int sum=0;
    for (int i = 0; i < str.length(); i++) {
        int m=str.length()-i-1;
        sum+=(str.charAt(i)-97)*Math.pow(26,m);
    }
    System.out.println(sum);
}


2017-04-01 21:17

什么时候开始题解啊 ,最后一道真不太有思路。

2017-04-01 21:18

第三道题(单词变换)一点思路都没有啊,怎么想都行不通

2017-04-01 21:18

不熟悉oj的输入输出;感觉js真的不适合用来做oj的题。。输入输出真的麻烦

2017-04-01 21:18

前端编程题中:酒店评星级的问题,可以帮我看看哪里有问题吗?提交时提示只过了20%,我怎么都没找到哪里出错了。

#include<iostream>
#include <algorithm>
using namespace std;
typedef struct Hotel
{
	int num;
    int min;
    float avage;
}h;
h hotel[10000];

bool cmpare(const h &a, const h &b){
     if(a.min > b.min){
     	//最低星级比较高的
     	return true;
     }else if(a.min == b.min){
    	//最低星级相等
    	if(a.avage > b.avage) {
    		//平均星级较高
    		return true;
    	}else if(a.avage == b.avage){
    		//平均星级相等
    		return a.num < b.num;
		} else{
			//平均星级较低
			return false;
		}
    }else{
    	//最低星级比较低
    	return false;
    }
    return false;
}

int main(){
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		int sum = 0;
		int min = 5;
		int tmp;
		for(int i=0;i<5;i++){
			cin>>tmp;
			sum += tmp;
			if(min > tmp){
				min = tmp;
			}
		}
		h htmp;
		htmp.num = i;
		htmp.min = min;
		htmp.avage = (float)sum / 5;
		hotel[i] = htmp;
	}
	sort(hotel,hotel+n,cmpare);
	
	for(int i=0;i<n;i++){
		cout<<hotel[i].num<<" ";
	}
	return 0;
}


2017-04-01 21:18
coder_5726XYD3 回复 acmcoderQ8VJUryD

sum的类型要是long才可以

2017-04-01 21:18
acmcoderWe9AUi35 回复 acmcoderQ8VJUryD

不能用int

2017-04-01 21:18
#include <stdio.h>
int main ()
{
	int n,i,j,sum=0,temp=0;
	int a[100],b[100],c[100];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	scanf("%d%d%d",&a[i],&b[i],&c[i]);
	switch(b[0]+c[0])
	{
			case 0:break;
			case 2:sum=sum+30;break;
			case 1:sum=sum+10;break;
	}
	for(i=1;i<n;i++)
	{	temp=0;
		switch(b[i]+c[i])
		{
			case 0:break;
			case 2:sum=sum+30;break;
			case 1:for(j=0;j<i&&temp==0;j++)
			{
				
			 if(a[i]-a[j]==0)
			 {sum=sum+5;temp=1;}
			 else {sum=sum+10;temp=1;}
			 
			}break;
		}
		
	}
	printf("%d\n",sum);
	
}

本地完全没问题,为啥提交上去是RE????????????????

蓝受 香菇

2017-04-01 21:19
acmcoderWe9AUi35 回复 acmcoderQ8VJUryD

我用int也是80%换成double就全部ok了

2017-04-01 21:19
acmcoderQ8VJUryD 回复 coder_5726XYD3

谢谢- - 我心中一万只草泥马在奔腾

2017-04-01 21:19

前端第一题 不是很懂为什么 输出没有一个对的 本地利用题目的用例带入进去是55呀 求解答谢谢


var temp=read_line();
var n=Number(temp);
var record=[];

while(temp=read_line()){

    record.push(temp);
}
if ( record == [])
    {
        print(0);
        return;

    }
    var sum = 0;
    var answered = {};
    var correct = {};
    for(var i=0;i<n;i++)
    {
        if(record[i].length!=3)continue
        var num1=Number(record[i].split(' ')[0]);
        var num2=Number(record[i].split(' ')[1]);
        var num3=Number(record[i].split(' ')[2]);


        if(num2==1&&num3==0){
            if(!answered[num1])
            {
                sum+=10

             correct[num1]=1;
             answered[num1]=1;
                continue
            }
            if(correct[num1])sum+=5;

        }else if(num2==num3&&num2==1){
            sum+=30;
        }


        if(num2==1){
            if(!correct[num1])correct[num1]=1;
        }
        if(!answered[num1])answered[num1]=1;
    }
    print(sum)


2017-04-01 21:19

是真的烦,JS为什么本地能过,线上就是过不了?我在牛客上能过,在赛码网就是过不了。特别是多行输入的题,从没有通过过..


2017-04-01 21:19

你好,第一题,构建二叉树没问题,自己输出也没问题,但就是没办法通过,一直怀疑是没打印换行符,可以尝试了十几分钟还是提示不通过,能麻烦看一看么?自信这题没写错...

n = raw_input()
mae = [int(i) for i in raw_input().split(' ')]
raw_naka = [int(i) for i in raw_input().split(' ')]
naka = [[i,1] for i in raw_naka]

for node in mae:
    idx = raw_naka.index(node)
    c = naka[idx][1]
    for n in naka[idx-1::-1]:
        if n[1] == c:
            n[1] = c+1
        else:
            break
    for n in naka[idx+1:]:
        if n[1] == c:
            n[1] = c+1
        else:
            break

now_c = 1
flg = 0
lst = []
while True:
    for n,c in naka:
        if c == now_c:
            flg += 1
            lst.append(n)
    if flg > 0:
        flg = 0
        now_c += 1
    else:
        break

for i in lst:
    print i,
print '\n'


2017-04-01 21:20

线上运行不给错误提示好蛋疼...

2017-04-01 21:20

第三题思路不是根据单词两两之间是否只差一个字符然后建立连接形成图,然后求初始和最终的最短路径?本地测试对的,提交现在0%?赛码测试用例都不带样例的?坑爹啊

2017-04-01 21:20

本地调试一直都对,到网页怎么都不对……

# include <iostream>

# include <stdio.h>

# include <math.h>

 using namespace std;


int main ()

{

    int n, m=0,i=0;

    char a[10];

    char c;

    int ans=0;


while(1)

{  

do{

    c=cin.get(); 

a[i]=c;

m++; 

i++;

   }while(c!='\n');

    for(i=m-2;i>=0;i--)

        {

          n=a[i]-97;

          ans=ans+n*pow(26,(m-2-i));

        }

cout<<ans<<'\n';

i=0;

m=0;

ans=0;

}

    return 0;

}


2017-04-01 21:20

import java.util.Scanner;


class TestAll { 

 public static void main (String [] args) { 

Scanner sc=new Scanner(System.in);

     String[] a=new String[4];

     for(int i=0;i<4;i++){

     a[i]=sc.next();}

     for(int v=0;v<4;v++){

     int count=0;

     for(int i=0;i<a[v].length();i++){

         int k=1;

         for(int j=0;j<a[v].length()-i-1;j++){

             k=26*k;

         }

      count=(((int)(a[v].charAt(i)))-97)*k+count;

     }

     System.out.println(count);

     } 

     }

 }

为什么还是不对呢???


2017-04-01 21:21
//大神帮我看一下
//字符串变换那道题哪里错了
//就是hot变dog那道题
//我在myEclipse一点问题没有,到了赛码网一个数据都不通过
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		int result=0;
		Scanner sc = new Scanner(System.in);
	    String s1 = sc.nextLine();
	    String s2 = sc.nextLine();
	    String s3 = sc.nextLine();
	    String[] arr=s3.split(" ");
	    //************
	    char[] start=s1.toCharArray();
	    char[] end=s2.toCharArray();
	    char[][] ss=new char[arr.length][start.length];
	    for(int m=0;m<arr.length;m++){
	    		ss[m]=arr[m].toCharArray();
	    }
	    //***********
	   int start_dif=0;
	   int[] difs=new int[arr.length];
	   //初始化start_dif
	   for(int i=0;i<start.length;i++){
		   if(start[i]!=end[i]){
			   start_dif++;
		   }
	   }
	   //初始化difs
	   for(int m=0;m<arr.length;m++){
		   int count=0;
		   for(int i=0;i<start.length;i++){
			   if(ss[m][i]!=end[i]){
				   count++;
			   }
		   }
		   difs[m]=count;
	   }
	   //开始变换
	   while(start_dif!=0){
		//先找difs[i]=start_dif-1的
		   ArrayList<Integer> list=new ArrayList<Integer>();
		   for(int i=0;i<arr.length;i++){
			   if(difs[i]==start_dif-1){
				   list.add(i);
			   }
		   }
		  //****************
		   for(int i=0;i<list.size();i++){
			   int difs_star=0;
			   for(int m=0;m<start.length;m++){
				   if(start[m]!=ss[list.get(i)][m]){
					   difs_star++;
				   }
			   }
			   if(difs_star==1){//只有一处不同,让start=ss[list.get(i)]
				   for(int n=0;n<start.length;n++){
					   start[n]=ss[list.get(i)][n];
				   }
				   start_dif--;
				   result++;
				   break;
			   }
		   }
	   }
	   System.out.println(result+1);
	}
}


2017-04-01 21:22
2
coder_TGTSEBJN 回复 acmcoderpLo4mrD1

你本地测试是对,你测了多少case?很可能是自己写挫了。。。我也过了样例但是0分,后来发现是自己写傻逼了

2017-04-01 21:22

表示只做了第2题(进制转换),且100%通过,求给个面试机会!

2017-04-01 21:22
1

软件开发实习生第一题,知道前序、后序得出层序遍历。本地测试对的,可是赛码系统上通过0%。

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int n = Integer.parseInt(scan.nextLine());
		String first = scan.nextLine();
		String order = scan.nextLine();
		floor(first,order,n);
		
	}
	public static void floor(String first,String order,int n){
		String[] a = first.split(" ");
		String[] b = order.split(" ");
		String[] c = new String[n];
		solve2(a, b, c, 0, 0, 0, n);
		for (int i = 0; i < n; i++) {
			System.out.print(Integer.parseInt(c[i])+" ");			
		}
	}
	//根据先序和中序遍历数组获取后序遍历数组
	public static void solve2(String[] first,String[] inner,String[] result,int preL,int inL,int posL,int n){
			if (n == 0) {
				return;
			}
			if (n == 1) {
				result[posL] = first[preL];return;
			}
			String root = first[preL];
			result[posL] = root;
			int i = 0;
			for (; i < n; i++) {
				if (Integer.parseInt(inner[inL+i]) == Integer.parseInt(root)) {
					break;
				}
			}
			int l = i;int r = n-i-1;
			solve2(first,inner,result,preL+1,inL,2*preL+1,l);//左子树
			solve2(first,inner,result,preL+1+l,inL+l+1,2*preL+2,r);//右子树
	}
}



5

1 2 4 5 3

4 2 5 1 3

结果输出:1 2 3 4 5 


2017-04-01 21:22

不知哪个地方不行啊,本地调试对的啊

#include<iostream>

#include <stdio.h>

#include <string.h>

using namespace std;

int main()

{

char istr[20];

int ostr[20];

int i, j, len;

int temp = 0;

int op = 1;

gets(istr);

len = strlen(istr);

if (len == 1 && istr[0] == 'a')

{

printf("0");

return 0;

}

for (i = len - 1; i >= 0; i--)

{

temp += ((istr[i] - 'a') * op);

op *= 26;

}

i = 0;

cout<<temp;


return 0;

}


2017-04-01 21:23
Gibbon 回复 acmcoderEBoYyqkP

能说一下你在指哪道题呢?我没有get到上下文

2017-04-01 21:23
coder_TGTSEBJN 回复 coder_9AWANR6U

String.split(" "); 直接解决

2017-04-01 21:23

后台研发,我用java写字符串那道题,连大数情况都考虑了,死活0%,我本地所有的测试用例都是过的,在线java测试用例和题目描述的不一样吧,40分钟做完其他两道,这道题干瞪眼1个多小时

2017-04-01 21:24
//求指教第二题,本地运行是正确啊!
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
	    static Scanner scanner = new Scanner(System.in);
	    public static void main(String[] args) {
	    	String str;
	    	while (true) {
		        str=scanner.next();
		        
		        if(str==null)break;
		        
		        System.out.println(name(str));
	    	}
		 
	    }
	    public static int  name(String str) {
		   
			 Map<Character, Integer> map = new HashMap<Character, Integer>();
			 char tmp='a';
			 for (int i = 0; i < 26; i++) {
				map.put((char) (tmp+i), i);
			 }
			 int sum=0;
			 String string=str;
		        
		     int len=string.length()-1;
		     char c[]=string.toCharArray();
		        for (int i = 0; i < c.length; i++) {
		        	if (c[i]>='a'&&c[i]<='z') {
			            int p=map.get(c[i]);
			            sum+=p*Math.pow(26, len--);
					}else {
						System.exit(0);
					}

		        }
		     
		  return sum;
	   }
	

}


2017-04-01 21:25
var n = read_line();
var sum = 0;
var question = [];
for (var i = 0; i < n; i++) {

    var input = read_line();
    var inputs = input.split(" ");
    if (inputs[1] === '0') {
        sum += 0;
    } else if (inputs[1] === '1' && inputs[2] === '1') {
        sum += 30;
    } else {
        var tag = 0;
        for (var j = 0; j < question.length; j++) {
            if (parseInt(question[j]) === parseInt(inputs[0])) {
                sum += 5;
                tag = 1;
            }
        }
        if (tag === 0) {
            sum += 10;
            question.push(inputs[0]);
        }

    }
}
print(sum);


2017-04-01 21:25
acmcoderpLo4mrD1 回复 coder_TGTSEBJN

虽然我觉得BFS我还不至于写错···,不过先多谢了。所以这个思路是正确的?在另一个帖子有人说着思路就是错的

2017-04-01 21:25

酒店问题 请问下这个逻辑有问题吗

单独保存一个 最低星 平均 位置下标的数组

重写SORT 对数组排序

输出位置下标 

但是只有20 求解答

var temp=read_line();

var n=Number(temp);

var arr=[];

 

while(temp=read_line()){

    

    arr.push(temp);

function sortgotel(arr){

    var res=[]

    var resinner=[]

    

    for(var i=0;i<arr.length;i++){

        var arrtemp=arr[i].split(" ")

        var min=10

        var count=0

        for(var j=0;j<arrtemp.length;j++){

            count+=Number(arrtemp[j])

            if(arrtemp[j]<min)min=Number(arrtemp[j])

        }

        var avg=Number((count/arrtemp.length).toFixed(2))

        resinner=[min,avg,i]

        res.push(resinner)

    }

    res.sort(function(a,b){

        if(a[0]>b[0]){

            return -1

        }else if(a[0]<b[0]){

            return 1

        }else{

            if(a[1]>b[1])return -1

            else if(a[1]<b[1])return 1

            else {

                if(a[2]<b[2])return -1

                else return 1

            }

        }

    })

    var res2=[]

   for(var z=0;z<res.length;z++){

        res2.push(res[z][2])

   }

   return res2

}

var rr=sortgotel(arr)

print(rr.join(" "))


2017-04-01 21:25


这是哪儿有错误吗

var n=-1;
var line;
var curLine=0;
var questionNum=[];
var isRight=[];
var ans=0;
while(line = read_line()){
    if(n<0){
        n=line;
    }else{
        line = line.split(' ');
    }
    line=line.map(function(item){
        return parseInt(item);
    });
    if(line[1]==1&&line[2]==1){
        ans+=30;
    }else{
        if(line[1]==1&&line[2]==0){
            if(questionNum.indexOf(line[0])==-1) {
                ans+=10;
            }else{
                var num=questionNum.indexOf(line[0]);
                if(isRight[num]==1){
                    ans+=5;
                }else{
                    ans+=10;
                }
            }
        }
    }
    questionNum[curLine]=line[0];
    isRight[curLine]=line[1];
    curLine +=1;
    if( curLine-1 ==n){
        print(ans);
    }

}


2017-04-01 21:25
coder_8UESMTNE 回复 acmcoderQ8VJUryD

用了double最后全部通过了

2017-04-01 21:25

第一题分层遍历,才对了20%,实在是想不通,能公布下测试用例麽.......

#include <bits/stdc++.h>
using namespace std;
class node{
public:
    int v;
    node *lchild;
    node *rchild;
    node(int value = 0){
        v = value;
        lchild = NULL;
        rchild = NULL;
    }
};
node* build(int a[], int as, int b[], int bs, int len){
    int temp = a[as];
    int i;
    for(i = bs; i < len; i++)
        if(b[i] == temp)
            break;
    node *head = new node(temp);
    if(i - bs >= 1)
        head->lchild = build(a, as + 1, b, bs, i - bs);
    if(len - (i - bs + 1) >= 1)
        head->rchild = build(a, as + i - bs + 1, b, i + 1, len - (i - bs + 1));
    return head;
}
void printTree(node *head){
    if(head == NULL)
        return;
    queue<node*> q;
    node *cur = head;
    q.push(cur);
    int flag = 1;
    while(!q.empty()){
        node *p = q.front();
        if(flag == 1){
            cout<<p->v;
            flag = 0;
        }
        else
            cout<<" "<<p->v;
        q.pop();
        if(p->lchild != NULL)
            q.push(p->lchild);
        if(p->rchild != NULL)
            q.push(p->rchild);
    }
}
int main()
{
    int n;
    cin>>n;
    int *a = new int[n];
    int *b = new int[n];
    for(int i = 0; i < n; i++)
        cin>>a[i];
    for(int i = 0; i < n; i++)
        cin>>b[i];
    node *head;
    head = build(a, 0, b, 0, n);
    printTree(head);
}


2017-04-01 21:25
1

你把结果定义成long类型

2017-04-01 21:26

很难受,题目算简单的吧,都会做但是第三题字符串变换时间不够了,第一题二叉树BFS浪费了太多时间,总想着用数组直接输出来一直debug,烦了直接写了个struct一下就出来...

第三题字符串变换我是把字符串数组每个字符串比较能否从当前字符串变换过去,生成树然后DFS,实现上的细节耽误太多时间了,字符串数组输入是用gets 然后每个n读入vector<string>,最后比较是否能变换时考虑逐个字母比较,复杂度应该这样但是实现细节...大家还有什么其他方法吗 来说说

2017-04-01 21:26
coder_5K9CHN2W 回复 coder_CX7GDTN2

你把结果定义成long类型试试

2017-04-01 21:28

所以,题解在哪里?

2017-04-01 21:28
	static int cc=0;
	static int[] result;
	static int[] sign;

	public static void main(String[] args){
		
		Scanner in = new Scanner(System.in);
		
		int nodeNum = in.nextInt();
		
		int[] qian = new int[nodeNum];
		int[] zhong = new int[nodeNum];
		
		for(int i =0;i<nodeNum;i++){
			qian[i] = in.nextInt();
		}
		for(int i =0;i<nodeNum;i++){
			zhong[i] = in.nextInt();
		}
		
		result = new int[nodeNum];
		sign = new int[nodeNum];
		
		
		getNode(zhong, qian,0);
		
		
		int count =0;
		for(int i=0;i<nodeNum;i++){
			if(count==nodeNum){
				break;
			}
			for(int j=0;j<result.length;j++){
				if(sign[j]==i){
					count++;
					if(count==nodeNum){
						System.out.print(result[j]);
					}else{
						System.out.print(result[j]+" ");
					}

				}
			}
		}
		
	}
	
	public static int getNode(int[] input,int[] qian,int layer){
		
		if(input.length==1){
			result[cc] = input[0];
			sign[cc] = layer;
			cc++;
			return 0;
		}
		
		int count=0;
		for(int i=0;i<input.length;i++){
			if(qian[cc]==input[i]){
				break;
			}
			count++;
		}
		result[cc] = input[count];
		sign[cc] = layer;
		cc++;
		
		int[] temp1 = new int[count];
		int[] temp2 = new int[input.length-1-count];
		for(int i =0;i<count;i++){
			temp1[i] = input[i];
		}
		for(int i=0;i<temp2.length;i++){
			temp2[i] = input[count+i+1];
		}
		
		getNode(temp1, qian,layer+1);
		getNode(temp2, qian,layer+1);
		return 0;
	}
	

第一题本地测试通过  赛码网上一直显示Runtime  error。。求解

2017-04-01 21:28

前端第一题,能帮我看看哪错了吗,说我所有测试数据结果均不正确,但是本地测试了好几组数据结果都对。

import java.util.HashMap;

import java.util.Map;

import java.util.Scanner;


public class Main{

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

int score = 0;

int n = scan.nextInt();

Map map = new HashMap();

int a = 0,b = 0,c = 0;

for (int i = 0; i < n; i++) {

a = scan.nextInt();

b = scan.nextInt();

c = scan.nextInt();

if(c == 1){

score += 30;

}else if(b == 1){

if(map.containsKey(a)&&map.get(a).equals(b)){

score += 5;

}else{

score += 10;

}

}

map.put(a, b);

}

System.out.println(score);

}

}


2017-04-01 21:28

题解在外面,第二个帖子,别在这里等了

2017-04-01 21:29
import java.util.ArrayList;
import java.util.Scanner;

/**
 * Created by ximi on 2017/4/1.
 */
public class Test2 {

    public static void reverse(ArrayList<String> list){
        for(int i = 0;i < list.size();i++){
            String s = list.get(i);
            //判断是不是为空
            if(s.length() == 0 || s == null)
                System.out.println(-1);
            //转换成小写
            s = s.trim().toLowerCase();
            //这里一定要定义成long,int会一直通不过,可能数据比较大
            long result = 0;
            for(int j = 0; j < s.length();j++){
                //逻辑转换
                result = result * 26 + s.charAt(j) - 'a';
            }
            System.out.println(result);
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayList<String> list = new ArrayList<String>();
        while(sc.hasNextLine()) {
            list.add(sc.nextLine());
        }
        reverse(list);
    }
}


2017-04-01 21:29
coder_MV7UY88J 回复 acmcodergQDILoGn

import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNext()){ String number=in.nextLine(); int len=number.length(); int[] tmp=new int[len]; for(int i=0;i<len;i++) tmp[len-i-1]=number.charAt(i)-‘a’; BigInteger result = new BigInteger(“0”); BigInteger base= new BigInteger(“26”); BigInteger ref=new BigInteger(“1”); for(int i=0;i<len;i++) { String ex=""+tmp[i]; BigInteger bigtemp=new BigInteger(ex); bigtemp=bigtemp.multiply(ref); result=result.add(bigtemp); ref=ref.multiply(base); } System.out.print("\n"+result); } } }

2017-04-01 21:30
coder_DR78E2VB 回复 acmcodergQDILoGn

边界 int不够用 换成long

2017-04-01 21:30

前端第二题,谁做出来了吗?本次测试结果正确啊,说正确率0.0

import java.util.Scanner;


public class Main {

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

int n = scan.nextInt();

int[][] a = new int[n][n];

for (int i = 0; i < n; i++) {

for (int j = 0; j < 5; j++) {

a[i][j] = scan.nextInt();

}

}

//System.out.println(sortHotel(n,a));

int[] min = new int[n];

double[] ave = new double[n];

int[] sort = new int[n];

for (int i = 0; i < n; i++) {

sort[i] = i;

}

for (int i = 0; i < n; i++) {

double sum = 0.00;

min[i] = a[i][0];

for (int j = 0; j < 5; j++) {

if(min[i]>a[i][j])

min[i] = a[i][j];

sum += a[i][j];

}

ave[i] = 0.00;

ave[i] = sum/5;

}

int temp;

for (int i = 0; i < n; i++) {

for (int j = i+1; j < n; j++) {

if(min[i]<min[j]){

temp=sort[i];

sort[i]=sort[j];

sort[j]=temp;

}else if(min[i] == min[j]){

if(ave[i]<ave[j]){

temp=sort[i];

sort[i]=sort[j];

sort[j]=temp;

}

}

}

}

for (int i = 0; i < n; i++) {

System.out.print(sort[i]+" ");

}

}


}

2017-04-01 21:30
coder_55YZQHVE 回复 coder_55YZQHVE

这个是前端的第一题

2017-04-01 21:30
Gibbon 回复 coder_CX7GDTN2

temp使用unsigned long long类型会比较好

2017-04-01 21:30
第一题,前序中序  构建树 求层序的题。
本地测试好好的,通过率只有20%。
哪位大神能给看看吗?

import sys

n = int(sys.stdin.readline().strip('\n'))

pre = map(int, sys.stdin.readline().strip('\n').split(' '))
mid = map(int, sys.stdin.readline().strip('\n').split(' '))
Tree = []

def make_tree(pre, mid, tree, n):
    if n == 1:
        root = pre[0]
        tree.append(root)
        return
    if n == 0:
        return
    root = pre[0]
    tree.append(root)
    tree.append([])
    tree.append([])
    for i,v in enumerate(mid):
        if root == v:
            make_tree(pre[1:i+1], mid[0:i], tree[1], i)
            make_tree(pre[i+1:], mid[i+1:], tree[2], n-1-i)

make_tree(pre, mid, Tree, n)

queue = []

queue.append(Tree)
while (len(queue)):
    tree = queue.pop(0)
    if len(tree) == 0:
        pass
    elif len(tree) == 1:
        print tree[0],
    elif len(tree) == 3:
        print tree[0],
        queue.append(tree[1])
        queue.append(tree[2])

print (Tree)


2017-04-01 21:33
acmcoderhkz8t67m 回复 acmcodercKqsvJNX

第3条规则,正确回答用户的问题,但没有给出正确解释,且该问题之前已经有过“正确”回答。注意,只有正确的才能放入map中

2017-04-01 21:39
一条咸鱼 回复 GanZiQim

语句print i,会在末尾加一个空格,导致最后一个数的后面也有一个空格

2017-04-01 21:45
coder_JUXJ9HEP 回复 acmcoderZSbxc1ZO

同学,你通过率多少

2017-04-01 21:54
acmcodersIA0BRjb 回复 acmcoder2gGMKDwE

很明显很多地方没有检查空

2017-04-01 21:58
GanZiQim 回复 一条咸鱼

刚刚想到了,做题的时候一直想就是想不到这里出了问题。。。不然3AC了。。。。

2017-04-01 22:00

单词变换,当时没做出来,时候又做了半小时算是调试出来了,调试了一下,全部通过

import java.util.*;


public class Main {
    private static int result = Integer.MAX_VALUE;

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String start = in.nextLine();
            String end = in.nextLine();
            List<String> listData = new ArrayList<>();
            String s = in.nextLine();
            listData = Arrays.asList(s.split(" "));
            System.out.println(initData(start, end, listData));
        }
    }

    // 初始化数据
    private static int initData(String start, String end, List<String> listData) {
        // 构建start 的 邻接矩阵
        Set<String> startLin = getStringSet(start);
        // 构建所有字典的邻接矩阵。
        Map<String, Set<String>> dictLin = new HashMap<>(listData.size());
        for (int i = 0; i < listData.size(); i++) {
            dictLin.put(listData.get(i), getStringSet(listData.get(i)));
        }
        // 遍历查找
        getResult(startLin, end, dictLin, 1);
        return result;
    }

    // 循环查找
    private static void getResult(Set<String> start, String end, Map<String, Set<String>> dictLin, int level) {
        for (String s : start) {
            Iterator<Map.Entry<String, Set<String>>> it = dictLin.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry entry = (Map.Entry) it.next();
                if (((Set<String>) entry.getValue()).contains(s)) {
                    if (entry.getKey().equals(end)) {
                        result = Math.min(result, level + 1);
                        return;
                    } else {
                        it.remove();
                        getResult((Set<String>) entry.getValue(), end, copy(dictLin), level + 1);
                    }
                }
            }
        }
    }

    //复制map
    private static Map<String, Set<String>> copy(Map<String, Set<String>> pre) {
        Map<String, Set<String>> res = new HashMap<>();
        for (String s : pre.keySet()) {
            res.put(s, pre.get(s));
        }
        return res;
    }

    // 构造邻接矩阵
    private static Set<String> getStringSet(String data) {
        HashSet<String> result = new HashSet<>();
        for (int i = 0; i < data.length(); i++) {
            String t = "";
            for (int j = i + 1; j < data.length() + i; j++) {
                t = t + data.charAt(j % data.length());
            }
            result.add(t);
        }
        return result;
    }
}


2017-04-01 22:01
一条咸鱼 回复 GanZiQim

python输出数组,还是用print ’ '.join(map(str, lst))吧;毕竟也不是C了,先转换成字符串很方便的

2017-04-01 22:04
GanZiQim 回复 一条咸鱼

做题的时候脑子卡住了,一紧张就忘了这玩意。。。吃一堑长一智吧,不知道两道AC能不能通过笔试。。真希望能给个机会。

2017-04-01 22:09

我提交过程一直让我缓冲,真的很亏啊,第二道检查一遍绝对能做出来,唉,死的冤啊

2017-04-01 23:54
import java.util.Scanner;

public class Main {
	static class person{
		public int pronum;
		public int retrue;
		public int jietrue;
		public int getpronum(){
			return pronum;
		}
		public int getreture(){
			return retrue;
		}
		public int getjietrue(){
			return jietrue;
		}
		public void setpronum(int _pronum){
			pronum=_pronum;
		}
		public void setretrue(int _retrue){
			retrue=_retrue;;
		}
		public void setjietrue(int _jietrue){
			jietrue=_jietrue;
		}
	}
	public static void main(String []args){
		Scanner sc=new Scanner(System.in);
		int money=0;
		int n=sc.nextInt();
		person p[]=new person[n];
		person p1[]=new person[n];
		for(int i=0;i<n;i++){
			p[i]=new person();
			p1[i]=new person();
			//for(int j=0;j<3;j++){
				int pnum=sc.nextInt();
				int re=sc.nextInt();
				int jie=sc.nextInt();
				p[i].setpronum(pnum);
				p[i].setretrue(re);
				p[i].setjietrue(jie);
				p1[i].setpronum(pnum);
				p1[i].setretrue(re);
				p1[i].setjietrue(jie);
		}
		for(int i=0;i<n;i++){
			if(i==0){
				if(p[i].getreture()==1){
					if(p[i].getjietrue()==1){
						money+=30;
					}
					else
						money+=10;
				}
			}
			else{
				if(p[i].getreture()==1){
					if(p[i].getjietrue()==1){
						money+=30;
					}
					else{
						//////
						boolean flag=false;
						for(int k=0;k<=i;k++){
							if(p1[k].getpronum()==p[i].getpronum()&&p1[k].getjietrue()==1){
								flag=true;
							}
						}
						if(flag==false){
							money+=10;
						}
						else
							money+=5;
					}
				}
			}
		}
		System.out.println(money);
		sc.close();
	}

}

同样是前端第一题,本地数据都正确了,但是编辑器一直说用例未通过

2017-04-02 09:45
coder_R3K9YWCV 回复 acmcoderhkz8t67m

我想问的是去哪儿网有应届前端????

2017-04-03 23:52
添加回复
回到顶部