微软Microsoft 暑期实习第一轮笔试

本文分享了微软Microsoft暑期实习第一轮笔试的经历,包括三道编程题目:矩阵操作、机器人运动和双生产线问题。题目允许开卷,采用动态规划和模拟方法解题,虽然部分题目未能完美解决,但提供了后期复习策略,强调动态规划的练习和方程构建的重要性。
摘要由CSDN通过智能技术生成

微软Microsoft 暑期实习第一轮笔试

概括:题目不难,就结果而言算是良好

但是微软申请必然很卷,如果大多数人都能全部做对的话结果就不好说了;据官方邮件结果发布是在3周以后。

微软一轮面试细节:

  • 突然收到邮件通知要求两天内自行完成笔试
  • 在codility做题,120分钟三道题
  • 完全开卷,无监考可以切屏,可以用本地IDE
  • 题目一律核心代码模式
  • 不显示所有的数据通过率,只显示4个案例通过情况

正因为是最简单的模式,加上题目本身不难,没全部做出来才感觉结果有点悬
据网上经验贴如果通过会在2~3月份安排面试,在线视频+敲代码

解题记录:(2小时 前2道题案例全过,第3题DP案例没全部过)

题号 题目考点 解答情况 详情
1 模拟:矩阵操作 案例全过 按题目要求模拟即可,10分钟解决
2 模拟:机器人运动 案例全过 20分钟完成初始代码,再花20分钟本地调试通过,修正了边界条件
3 动态规划:双生产线求最优解 案例2/4通过 结果不理想,没构建完善的Bellman方程,时间来不及

题目代码:

1、第一题 模拟:矩阵操作

送分题,没用到本地IDE
对N*N全0矩阵,根据输入的字符串和数组操作,最后输出矩阵中最大值
直接模拟法,最后输出最大值时 O ( N 2 ) O(N^2) O(N2)复杂度
如果扣分只能是时间复杂度上优化问题了,但不用直接模拟似乎也没别的解法
请添加图片描述

2、第二题 模拟:机器人运动

N*M矩阵上有若干障碍物或者没清洁的空地,机器人从[0,0]向右出发,前方遇到障碍物则顺时针回避,输出机器人能清理的空地数量
在这里插入图片描述
代码:

#include<bits/stdc++.h>
using namespace std;
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;

//机器人顺时针走 状态dir:0,1,2,3表示现在前进方向,遇到障碍后更新dir

//map[N][M]:-1,0,1 标记是否清理过,-1是障碍物
//res 不断更新
//大循环 重复N*M次,最后输出res肯定不会再更新
int solution(vector<string>& R) {
   
    // write your code in C++14 (g++ 6.2.0)
    int N = R.size();
    int M = R[0].size(), i, j;
    vector<vector<int>>map(N, vector<int>(M, 0));
    for (i = 0; i < N; i++)
        for (j = 0; j < M; j++)
            if (R[i][j] == 'X')map[i][j] = -1;
    /*
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < M; j++)
            cout << map[i][j] << " ";
        cout << endl;
    }*/     
    // vector<vector<int>>flag=map;
    int dir = 0, MAX_TIMES = N * M, res = 0;
    i = j = 0;//机器人位置指针
    while (MAX_TIMES--)
    {
   
        if (map[i][j] == 0)//未清理 
            map[i][j] = 1, res++;
        bool obs_flag = 0;
        //判断前方是否有障碍物
        do {
   
            if (dir == 0 && (j == M - 1 || map[i][j + 1] == -1))
                obs_flag = 1;
            else if (dir == 1 && (i == N - 1 || map[i + 1][j] == -1))
                obs_flag = 1;
            else if (dir == 2 && (j == 0 || map[i][j - 1] == -1))
                obs_flag = 1;
            else if (dir == 3 && (i == 0 || map[i - 1][j] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kaze-1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值