人人笔试编程题怎么这么简单
发布于 2017-04-26 15:55 4134 次浏览 0 赞 来自 试题交流  

是我做错试卷了吗

34 条回复

我擦,你做过?

9号的那次我没参加,这次不怎么样,估计没希望了

2017-04-26 17:10

最后一道不知道为什么只有60%

2017-04-26 17:10

提示我说时间超了,但就是想不到更好的算法


2017-04-26 17:12

你们最后一道题都是怎么做的

2017-04-26 17:12

大神帮我看看我这哪有问题

import java.util.*;

public class Main {

public static void main(String[] args) {

Scanner cin = new Scanner(System.in);

while (cin.hasNext()) {

int n=cin.nextInt();

          List<Integer> list=new ArrayList<>();

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

list.add(cin.nextInt());

}

if (n == 1)

System.out.println(0);

if (n == 2) {

if (list.get(0) == list.get(1))

System.out.println(1);

else System.out.println(0);

} else if (n > 2) {

int count = 0;

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

int left = 0;

int right = 0;

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

left += list.get(j);

}

for (int j = n - 1; j > i; j--) {

right += list.get(j);

}

if (left != right) {

count++;

}

}

System.out.println(n - count);

}

}

}

}


2017-04-26 17:13
1

全程懵逼

2017-04-26 17:19
coder_7KC88KRD 回复 coder_5DMM8XJB

竟然这么简单。。。是我把问题想复杂了。。。。

2017-04-26 17:24

要做多少分可以进面试?我就AC了两道,选择题好多都忘记了,估计对半吧。

2017-04-26 17:25

第一题咋做的?


2017-04-26 17:27
coder_HNMRYCZG 回复 coder_7KC88KRD
import java.util.Scanner;


public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n=sc.nextInt();
		int m=sc.nextInt();
		int currenttime=0;
		int sum = 0;
		int count=0;
		if(m>235){
			System.out.println(0);
		}else{
			for (int i = 1; i <= n; i++) {
				currenttime +=i*5;
				sum = currenttime+m;
				
				if(sum>240){
					break;}
				count = i;
			}
			System.out.println(count);
		}
	}
}


2017-04-26 17:28
acmcoderKgPEOCsA 回复 枭鹰

首先统计数组和sum是否为2的倍数,然后在数组中找sum/2出现的组合(包括单个元素)的个数

2017-04-26 17:30
acmcoderDlapePBz 回复 coder_5DMM8XJB

时间超限

2017-04-26 17:31
coder_HNMRYCZG 回复 coder_KV38Q4P8

求最大公约数。

2017-04-26 17:31
coder_7KC88KRD 回复 coder_HNMRYCZG

这个我会,我就做出来第二道,100%AC的

2017-04-26 17:34
coder_7KC88KRD 回复 coder_HNMRYCZG

最大公约数?你确定?

2017-04-26 17:36
var arr;
var n = read_line();
var result=1;
var find = true;
var array = new Array();
while(arr = read_line()){
    arr = arr.split(' ');
    //find min
    var min = arr[0];
    for(var x = 0;x < n; x++){
    	if(arr[x] < min)
            min = arr[x];
    }
    for(var i = 1; i <= min; i++){
    	for(var j = 0; j < n; j++){
        	if(arr[j] % i == 0){
            	array[j] = 1;
            }
        }
        for(var y = 0; y <array.length; y++){
        	if(array[y] !== 1)
                find = false;
        }
        if(find == true)
            result = i;
    }
    print(result);
}

第一题ac 10%,大神们看看什么问题

2017-04-26 17:48

第二题也是ac 10%,求解答:

/*
在大年三十的晚上,小明不想看春晚,就在网上报名了一场网络程序设计比赛,比赛将于20:00开始,持续4个小时,之到午夜。
比赛中会有n个问题,按照难度排序,也就是说,第一个问题是最简单的,最后一个问题是最难的。小明知道他解决第k个问题需要k * 5分钟。
小明的父母允许小明不看春晚,但要求他必须参加跨年,就是小明必须在12.00或者12.00之前赶到客厅和父母一起跨年。
他需要m分钟从房间走到客厅。请问,小明在去参加跨年之前最多能解决多少问题。
每个样例输入两行,每行一个整数,n和m,(1 ≤ n ≤ 10, 1 ≤ m ≤ 240) 。
输出小明最多能解决的问题数。
*/
var n = read_line();
var m = read_line();
const allTime = 240;
var time = m,k = 0;
for(var i=1; i<=n; i++){
	time += i*5;
    if(time <= allTime){
    	k++;
    }
}
print(k);


2017-04-26 17:49

第三题没通过,什么问题啊

/*
小B正处于百无聊赖中,提不起干活的兴趣。看到桌面上的一条带着方格纸带,于是随手拿起一支笔,
在纸带的每个方格中写上一个随机想起的数字。然后把纸带折起来撕成两半,她突然发现两半中各个数值加起来的和竟然是一样的。
小B一下子有了一点精神,她想知道可以有多少种方式把纸带撕成两半,仍然使得两边的数值之和是相等的。你能帮她吗!
测试数据有多组,每组测试数据的第一行为一个整数n(1=< n <=100000),为纸带上的方格数,第二行为n个空格分隔的数值,为小B写入方格的数值,所有的数都是绝对值不超过10000的整数。
对每组测试数据,在单独的行中输出不同撕法的总数,使得两边纸带中的数值之和相等。将纸带撕成两半时,只能沿方格的边缘撕开。
*/
var left = 0;
var right= 0;
var num  = 0;
var n    = 0;
while(n = read_line()){
	var arr = read_line();
    arr = Number(arr.split(' '));
    for(var i = 0; i < n-1; i++){
    	for(var l = 0; l <= i; l++){
        	left += arr[l];
        }
        for(var r = i+1; r <= n-1; r++){
        	right +=arr[r];
        }
        if(left == right)
            num++;
    }
    print(num);
}


2017-04-26 17:50
coder_F8YQG95F 回复 coder_5DMM8XJB

第一次做

2017-04-26 17:56
coder_F8YQG95F 回复 coder_KV38Q4P8

是最大公约数

2017-04-26 17:58
最后一题我是这么写的

import java.util.Scanner;
public class Main {
    public static void main(String[] args){
    	Scanner sc = new Scanner(System.in);
    	while(sc.hasNext()){
    		int n = sc.nextInt();
    		int[] num = new int[n];
    		for(int i=0;i<num.length;i++){
    			num[i]=sc.nextInt();
    		}
    		int sum=0;
    		for(int i=0;i<num.length;i++){
    			sum=num[i]+sum;
    		}
    		if(sum%2==0){
    			int sumto=sum/2;
    			int test=0;
    			int count=0;
    			for(int i=0;i<num.length-1;i++){
    				test=test+num[i];
    				if(sumto==test){
    					count++;
    				}
    			}
    			System.out.println(count);
    		}else{
    			System.out.println(0);
    		}
    	}
    }
}


2017-04-26 18:00
coder_Q2YCJU8B 回复 acmcoderKgPEOCsA

大神能帮我看看我这个代码为什么一直AC 60不

#include <iostream>

#include <vector> #include <algorithm> #include <numeric> using namespace std; int fun(vector<int> vec) {

int&nbsp;cnt=0;
vector&lt;int&gt;::iterator&nbsp;it;	
vector&lt;int&gt;::iterator&nbsp;beg=vec.begin();
vector&lt;int&gt;::iterator&nbsp;end=vec.end();&nbsp;
for&nbsp;(it=beg;it!=end;++it)
{
	if&nbsp;(*it!=0)		
		break;		
	else
		cout&lt;&lt;vec.size()-1&lt;&lt;endl;
		return&nbsp;0;
}
int&nbsp;temp1,temp2,temp3;
temp1=accumulate(beg,beg+1,0);
temp2=accumulate(beg+1,end,0);
for&nbsp;(it=beg+1;it!=vec.end();++it)
{
	temp1+=*it;
	temp2-=*it;
	if&nbsp;(temp1==temp2)
	{
		cnt++;
	}
}
temp3=accumulate(vec.begin(),vec.end(),0);
if&nbsp;(temp3==0)
{
	cnt--;
}
cout&lt;&lt;cnt&lt;&lt;endl;	
return&nbsp;0;

} int main() { int n(0),num(0),cnt(0),m(0);//整数个数 vector< vector<int>> vec; vec.resize(100); while(cin>>n) {

	while(n--)
	{
		cin&gt;&gt;m;
		vec[num].push_back(m);
		
	}		
	num++;	
}	
for&nbsp;(int&nbsp;i=0;i&lt;num;++i)	
	fun(vec[i]);
		
return&nbsp;0;

}


2017-04-26 18:14
coder_FRjq70xQ 回复 coder_F8YQG95F

代码还可以优化,把数组累加求和放到读取数据的时候进行求和

2017-04-26 18:42
枭鹰 回复 acmcoderKgPEOCsA

若不是2的倍数,就说明没有这样的分割,这样时间复杂度就是O(n),确实是不错的算法

2017-04-26 20:41
acmcodersIA0BRjb 回复 枭鹰

可以优化到O(n)

2017-04-26 22:02

O(n)写法  ™的真是太坑了没想起来啊

int sumEqual(int *array,int length)
{
	if(array==NULL||length<=0)
	return -1;
	int sumLeft=array[0];
	int sumRight=0;
	int pSum=0;
	for(int i=1;i<length;i++)
	{
		sumRight+=array[i];
	}
	for(int i=1;i<length;i++)
	{	
		if(sumLeft==sumRight)
		  pSum++;

		sumLeft+=array[i];
		sumRight-=array[i];	

	}
	return pSum;
}


2017-04-26 22:04
acmcodersIA0BRjb 回复 acmcoderqJOf1oNI

边界没有考虑 比如 m大于235

2017-04-26 22:09

三题全ac,选择不确定

第一题求公约数(看了很久才看明白题意)。我的方法就是读数的时候顺便找出最小的一个数,接着求出最小的数的全部约数,然后从最大的约数起,验证是否是全部数的约数,是就输出。

第二题很直接,就用贪心算法做,不过要注意边界

第三题我用的方法是用两个int(suml,sumr)储存左边和右边的和,一个int(n)存储有几种撕法,在读取数据(数据存在num[i])的时候顺便求和,值存在sumr里,然后从i=0起,到i=n-1,依次计算suml+=num[i],sumr-=num[i],判断sumr==suml,相等就n++;这个方法时间复杂度是o(n)。需要注意的是方格数只有1的情况,这种情况应该输出0,我就是没考虑这个情况,前几次提交只过了80%。


总体来说,题目很简单,测试数据也很少,基本不需要考虑时间复杂度。


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

题外话,从三月到现在,过了几家大公司的笔试面试却没过,心真累。而且公司基本在外地,面试一次就得花1000,钱包也受不了。人人网这个过了我都不想去面试了。想等毕业找个小公司实习,争取2年后做个独立开发者。

现在受的苦都是秋招时脑子进的水呀~~~~~~~~

2017-04-26 23:30

我记得三月份的笔试就3条编程题 我a了2条被pass 然而有学弟只a了1条 就去面试了 现在我a了3条 然而选择题基本不会 (我是搞前端的 ) 我觉得我还是会被pass 反正感觉人人很奇怪 祝你好运!-----(应届生的痛 !)

2017-04-27 01:01
coder_R3K9YWCV 回复 coder_HNMRYCZG

和我一样是应届的话 就悬了 实习估计差不多。。

2017-04-27 01:12
小码快跑 回复 acmcoderlOTxi95v

加油!幡然醒悟总比执迷不悟好,一定会成功的!

2017-04-27 08:53
coder_FRjq70xQ 回复 acmcoderlOTxi95v

我直接错过秋招,被企业和学校坑惨了,不打算再找了,打算毕业直接去一线城市找

2017-04-27 09:20

最后一题我是先求数组的和,然后一个for去求左边的累加和和数组的和减去左边的和,相等就+1,也A了

2017-04-28 16:30

收到offer路过

2017-05-01 19:43
添加回复
回到顶部