2018.3.22 美团2018校招笔试

总体来说体验不错,考题总共分为四个部分,前三部分涉及较广,连编译原理,软件工程,汇编都考到了一点。数学部分偏概率和排列组合,但都是高中的常规考题。

要吐槽的就是有两道图片逻辑题了,眼瞎(星际)的我是在看不出什么规律:

郑重声明!下面考题的图片来自http://a.xiumi.us/board/v5/39Vza/81056540

这里写图片描述

这里写图片描述

各位看官们找到规律了吗,反正这两道我当时是凭感觉选的。。。

好像还有一道概率题,红绿灯的那个,四个答案都没正确的?我自己算的答案选择题里没有,事后在讨论区也看到一部分人吐槽这道题。不知道是我们错了,还是MT的锅。。。

第四部分编程题

中规中矩,两道题算都AC了吧。

第一道图论,求给的简单图中加多少边能成为闭图。
思路:
纪录每个点的度数,按照度数排序,找到刚好满足d(u)+d(v)>=n的,扫描右面的,检查是否有直连边,纪录即可。
这里写图片描述

#include<iostream>
#include <bits/stdc++.h>
using namespace std;

struct Point
{
	int Id;
	int Degree;
};
int cmp(const void* p1, const void *p2)
{
	Point *pt1 = (Point*)p1, *pt2 = (Point*)p2;
	return pt1->Degree - pt2->Degree;
}
int binary(Point ps[], int n, int de)
{
	int start = 0, end = n - 1;
	while (start <= end) {
		int mid = (start + end) / 2;
		if (ps[mid].Degree < de)
			start = mid + 1;
		else if (ps[mid].Degree >= de)
			end = mid - 1;
	}
	if (end == n - 1)
		return -1;
	return end + 1;
}

int main()
{
//    freopen("in.txt","r",stdin);
//	while (true)
//	{
		int added = 0;
		int pointc, edgec;
		int flag[55][55] = {};
		Point points[55];
		scanf("%d%d", &pointc, &edgec);
		for (int s = 0; s < pointc; s++)
		{
			points[s].Id = s;
			points[s].Degree = 0;
		}
		for (int s = 0; s < edgec; s++)
		{
			int p1, p2;
			scanf("%d%d", &p1, &p2);
			flag[p1 - 1][p2 - 1] = 1;
			flag[p2 - 1][p1 - 1] = 1;
			points[p1 - 1].Degree++;
			points[p2 - 1].Degree++;
		}
		qsort(points, pointc, sizeof(Point), cmp);
		for (int s = pointc - 1; s >= 0; s--)
		{
			int low = pointc - points[s].Degree;
			int index = binary(points, pointc, low);
			while (index < pointc)
			{
				if (index != s)
				{
					if (flag[points[s].Id][points[index].Id] == 0&& flag[points[index].Id][points[s].Id]== 0)
					{
						flag[points[s].Id][points[index].Id] = 1;
						flag[points[index].Id][points[s].Id] = 1;
						added++;
					}
				}
				index++;
			}
		}
		printf("%d\n", added);
//	}
	return 0;
}

第二道就是一个字符串结构体排序,很简单,直接换C++写了。

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int a[100];
struct Qu
{
    string s;
    double X,Y;
    int d;
};
int so(double x,double y)
{
    double a = y/x;
    if(a<=0.3&&a>=0)
    {
        return 5;
    }
    else if(0.3<a&&a<=0.6)
    {
        return 4;
    }
    else if(0.6<a&&a<=1)
    {
        return 3;
    }
}

bool cmp(Qu s1,Qu s2) {
    return s1.s < s2.s;
}

int main()
{
//    freopen("in.txt","r",stdin);

    Qu a[110];
    int n;
    cin>>n;
    for(int i = 0; i < n; i++)
    {
        cin>>a[i].s>>a[i].X>>a[i].Y;
        int t = so(a[i].X,a[i].Y);
        a[i].d = t;
    }
    sort(a,a+n,cmp);
    for(int i = 0; i < n; i++) {
        cout<<a[i].s<<" "<<a[i].d<<endl;;
    }

    return 0;
}

posted @ 2018-03-23 20:41  Lawliet__zmz  阅读(443)  评论(0编辑  收藏  举报