精华 人人网2017春招3.19在线笔试编程题解
发布于 2017-03-19 21:16 5034 次浏览 1 赞 最后一次编辑是 2017-03-19 21:27 来自 笔试面试  

真题链接(内有详细题解供同学们参考)

 波形图:

http://exercise.acmcoder.com/online/online_judge_ques?ques_id=3881&konwledgeId=172 


红包的收益:

http://exercise.acmcoder.com/online/online_judge_ques?ques_id=3880&konwledgeId=172 


神奇的规律:

http://exercise.acmcoder.com/online/online_judge_ques?ques_id=3879&konwledgeId=172 


波形图:

简单模拟题

参考代码:

#include <bits/stdc++.h>
#define maxn 100009
using namespace std;
char s[maxn];
int main(){
	int tt;
	scanf("%d",&tt);
	while(tt--){
		scanf("%s",s);
		int n=strlen(s);
		if(s[0]=='+'||s[0]=='-'){
			for(int i=0;i<n;i++){
				if(s[i]=='+')
					printf("/\\");
				else
					printf("__");
			}
		}
		else{
			for(int i=0;i<n;i+=2){
				if(s[i]=='_')
					printf("-");
				else
					printf("+");
			}
		}
		puts("");
	}
	return 0;
}


红包的收益:

模拟题,按照题意算出每个人的收支

参考代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define mem(cur) mem[Location(cur)]
#define mem_j mem(cur).list[j]
int n;
struct node{
    char name[15];
    int total;
    int pn;
    int r;
    int s;
    char list[20][15];
}mem[20];
char cur[15];
int Location(char* name){
    int i;
    for (i=1; i<=n; i++) {
        if (!strcmp(name, mem[i].name)) {
            return i;
        }
    }
    return 0;
}
int main(){
//    freopen("gift1.in", "r", stdin);
//    freopen("gift1.out", "w", stdout);
    int i,j;
    scanf("%d",&n);
    const int np=n;
    memset(mem, 0, sizeof(mem));
    for (i=1; i<=np; i++) {
        scanf("%s",mem[i].name);
    }
    for (i=1; i<=np; i++) {
        scanf("%s",cur);
        scanf("%d%d",&mem(cur).total,&mem(cur).pn);
        for (j=1; j<=mem(cur).pn; j++) {
            scanf("%s",mem_j);
            mem[Location(mem_j)].r+=mem(cur).total/mem(cur).pn;
            mem(cur).s+=mem(cur).total/mem(cur).pn;
        }
    }
    for (i=1; i<=np; i++) {
        printf("%s %d\n",mem[i].name,mem[i].r-mem[i].s);
    }
    return 0;
}


神奇的规律:

找规律,使用简单的数论知识即可

参考代码:

#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <set>
#include <map>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cassert>
#include <climits>

#pragma warning( disable : 4996)

using namespace std;

const int maxn = 1111;



int main() {
	//freopen("rule_10.in", "r", stdin);
	//freopen("rule_10.out", "w", stdout);
	long long b;
	while (cin >> b) {
		int x, y;
		for (int i = 2; i < b; i++) {
			if (b % i == 1) {
				x = i;
				break;
			}
		}
		long long b1 = b + 1;
		long long b2 = b * b - 1;
		for (int i = 2; i <= b1; i++) {
			if (b1 % i == 0 && b2 % i == 0) {
				y = i;
				break;
			}
		}
		cout << x << ' ' << y << endl;
	}
}


以上思路供参考,欢迎同学们讨论交流

27 条回复

第三题没看懂啊,b不是b进制的意思么

2017-03-19 21:20
1

能公布第二题的测试数据吗  实在看不出错在哪

import java.util.HashMap;

import java.util.LinkedList;

import java.util.List;

import java.util.Map;

import java.util.Scanner;


public class Main {

class Friend{

public String name;

public List<String> partner;

public int money;

public int nowMoney;

public Friend(String name){

this.name = name;

}

}

public void process(){

Scanner scan = new Scanner(System.in);

int amount = scan.nextInt();

Friend[] friends = new Friend[amount];

//who give me money

Map<String,List<Friend>> map = new HashMap<String,List<Friend>>();

Map<String,Integer> nameToIndex = new HashMap<String,Integer>();

scan.nextLine();

for(int i = 0; i < friends.length;i++){

String name = scan.nextLine();

map.put(name, new LinkedList<Friend>());

nameToIndex.put(name, i);

friends[i] = new Friend(name);

}

for(int i = 0; i < friends.length;i++){

String name = scan.nextLine();

int index = nameToIndex.get(name);

int money = scan.nextInt();

int friendsAmount = scan.nextInt();

scan.nextLine();

List<String> friendsList = new LinkedList<String>();

for(int k = 0; k < friendsAmount;k++){

String temp = scan.nextLine();

if(map.containsKey(temp)){

map.get(temp).add(friends[index]);

}

friendsList.add(temp);

}

friends[index].money = money;

friends[index].partner = friendsList;

}

func(friends,map);

scan.close();

}


private void func(Friend[] friends, Map<String, List<Friend>> map) {

for(Friend per:friends){

int recieve = getFromFriends(map.get(per.name));

if(per.partner.size()!=0){

per.nowMoney = recieve + per.money%per.partner.size();

}

else{

per.nowMoney = recieve + per.money;

}

}

for(Friend per:friends){

System.out.println(per.name+" "+(per.nowMoney-per.money));

}

}



private int getFromFriends(List<Friend> list) {

int sum = 0;

for(Friend per:list){

sum += per.money / per.partner.size();

}

return sum;

}



public static void main(String[] args){

Main m = new Main();

m.process();

}

}


2017-03-19 21:20
#import <Foundation/Foundation.h>

int main(int argc,char * argv[])
{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
        NSMutableArray *arr = [NSMutableArray new];
        
        int T;
        
        scanf("%d",&T);
        
        for (int i = 0 ; i < T; i++) {
            char str[100000];
            
            if(scanf("%s",str)!=EOF)
            {
                NSString *str1 = [NSString stringWithFormat:@"%s",str];
                
                [arr addObject:str1];
            }
        }
        
        for (int i = 0 ; i < T; i++){
            NSString *temp = [NSString stringWithFormat:@"%@",arr[i]];
            
            NSString *str2=[NSString new];
            
            char firstStr = [temp characterAtIndex:0];
            
            if (firstStr == '-' || firstStr == '+' ) {
                str2=[temp stringByReplacingOccurrencesOfString:@"-" withString:@"__"];
                str2=[str2 stringByReplacingOccurrencesOfString:@"+" withString:@"/\\"];
            }
            else
            {
                str2=[temp stringByReplacingOccurrencesOfString:@"__" withString:@"-"];
                str2=[str2 stringByReplacingOccurrencesOfString:@"/\\" withString:@"+"];
            }
            
            NSLog(@"%@\n",str2);
        }
    [pool drain];
    return 0;
}
为什么我这个在本地正确,在这里调试后说输出结果不正确


2017-03-19 21:22
coder_Z74B2FBG 回复 coder_29SRH3D4

他的意思应该是 找出了规律 只要是b%x=1的,就是最小的x。。。。y也是一个规律..... 

2017-03-19 21:22

我想知道你们全写了吗?

2017-03-19 21:22
coder_29SRH3D4 回复 coder_2U5W4RD3

选择基本靠蒙,编程第三题没看懂

2017-03-19 21:23

神奇的规律这个差10%,另外两个过了。不知道10%差哪里了。

2017-03-19 21:24

import java.util.HashMap;

import java.util.Map;

import java.util.Scanner;


public class Main {

public static void main(String[] args) {

Scanner scanner =new Scanner(System.in);

int n=scanner.nextInt();

scanner.nextLine();

Map<String, Integer> map=new HashMap<String, Integer>();

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

String name=scanner.nextLine();

map.put(name, 0);

}

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

String name=scanner.next();

int mi=scanner.nextInt();//每个人的钱数,用来法红包

int ki=scanner.nextInt();

int money=0;

if(ki!=0){

int t=mi%ki;

money=(mi-t)/ki;

map.put(name, mi%ki+map.get(name)-mi);

}

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

String tname=scanner.next();

map.put(tname,(map.get(tname)+money));

}

}

for(Map.Entry<String, Integer> entry:map.entrySet()){

System.out.println(entry.getKey()+" "+entry.getValue());

}

scanner.close();

}

}

说只通过40%的测试数据,我错在哪里了?


2017-03-19 21:25
coder_29SRH3D4 回复 coder_Z74B2FBG

…原来如此,给跪了

2017-03-19 21:25
lct 回复 acmcoderRZEcgOao

输出顺序要和输入顺序一致,HashMap不保证存储按照输入顺序来的

2017-03-19 21:26

一点点的数论知识?具体是??

2017-03-19 21:27
acmcoderRZEcgOao 回复 lct

哦,原来如此,我把这茬给忘了

2017-03-19 21:28
acmcoderRZEcgOao 回复 acmcoderRZEcgOao

我把Map<String, Integer> map=new HashMap<String, Integer>();改成Map<String, Integer> map=new LinkedHashMap<String, Integer>();就AC了,无语。。。。

2017-03-19 21:30
coder_5DMM8XJB 回复 coder_Z74B2FBG

我擦,考我们语文呢

2017-03-19 21:30
小码快跑 回复 acmcoderAhH2glKa

同学可以参考下真题链接里面的详细题解,里面会有详细说明,帖子里一般做简单说明

2017-03-19 21:30
acmcoder0ZiIDQBM 回复 coder_YGD45UF9

红包的收益为什么会是负的呢?

2017-03-19 21:31
lct 回复 acmcoderRZEcgOao

LinkedHashMap是按照顺序来的,Hash Map要计算hash值的

2017-03-19 21:32
lct 回复 acmcoder0ZiIDQBM

你有100,你发出去100,收到20不就是-80么

2017-03-19 21:33
acmcoderTalpRWQ5 回复 coder_YGD45UF9

我全AC…

2017-03-19 21:38
acmcoderoiMisKxS 回复 coder_22JZ5S4D

你看看内存 或者运行时间

2017-03-19 21:43

不明白那个神奇规律到底是什么意思,有没有大侠给讲一下思路啊

2017-03-19 21:51

能不能出个大神用java做啊。。。。

2017-03-19 22:19
coder_YGD45UF9 回复 acmcoder0ZiIDQBM

因为发出去的都要减的

2017-03-19 22:20

这个用PHP做太简单了  只可惜没参加。。。

2017-03-19 23:37

撸了两道还有机会吗

2017-03-21 08:33
小码快跑 回复 coder_HMMF9NM7

AC两道应该不错了,时刻做好准备吧,哪怕没机会也按要去面试准备着,万一机会来了没准备好就可惜了~加油!

2017-03-21 09:55
添加回复
回到顶部