【筆試練習】美團筆試題(一)

1、棋子翻轉

題目描述

在4x4的棋盤上擺滿了黑白棋子,黑白兩色的位置和數目隨機其中左上角座標爲(1,1),右下角座標爲(4,4),現在依次有一些翻轉操作,要對一些給定支點座標爲中心的上下左右四個棋子的顏色進行翻轉,請計算出翻轉後的棋盤顏色。

給定兩個數組Af,分別爲初始棋盤和翻轉位置。其中翻轉位置共有3個。請返回翻轉後的棋盤。

測試樣例:
[[0,0,1,1],[1,0,1,0],[0,1,1,0],[0,0,1,0]],[[2,2],[3,3],[4,4]]
返回:[[0,1,1,1],[0,0,1,0],[0,1,1,0],[0,0,1,0]]


題目分析:本題主要考查二維數組,掌握0變1,1變0最簡單的辦法--異或法。比較容易犯錯的地方就是沒有注意數組的越界問題。

代碼展示:

class Flip {
public:
	vector<vector<int> > flipChess(vector<vector<int> > A, vector<vector<int> > f) {
		// write code here
		for (int i = 0; i < f.size(); ++i)
		{
			int x = f[i][0]-1;
			int y = f[i][1]-1;
           if(x - 1 >= 0){
               A[x - 1][y] ^= 1;
           }
            if(y - 1 >= 0){
                A[x][y - 1] ^= 1;
            }
            if(x + 1 <= 3){
                A[x + 1][y] ^= 1;
            }
            if(y + 1 <= 3){
                A[x][y + 1] ^= 1;
            }
		}
		return A;
	}
};

2、最大差值

題目描述

有一個長爲n的數組A,求滿足0≤a≤b<n的A[b]-A[a]的最大值。

給定數組A及它的大小n,請返回最大差值。

測試樣例:
[10,5],2
返回:0

題目分析:本題的重點就是找到最小值,然後找到最大的差值。

代碼實現:

class LongestDistance {
public:
	int getDis(vector<int> A, int n) {
		// write code here
		int minNum = A[0];
		int maxDiff = 0;
		for (int i = 1; i < n; ++i)
		{
			if (A[i] < minNum)
				minNum = A[i];
			if (A[i] - minNum > maxDiff)
				maxDiff = A[i] - minNum;
		}
		return  maxDiff;
	}
};

3、平均年齡

題目描述

已知某公司總人數爲W,平均年齡爲Y歲(每年3月末計算,同時每年3月初入職新人),假設每年離職率爲x,x>0&&x<1,每年保持所有員工總數不變進行招聘,新員工平均年齡21歲。 
從今年3月末開始,請實現一個算法,可以計算出第N年後公司員工的平均年齡。(結果向上取整)。 
輸入描述:
輸入W Y x N


輸出描述:
輸出第N年後的平均年齡


題目分析:本題需要注意的是,每過一年,平均年齡必然增加一歲。還有,就是年齡向下取整,這裏可以調用函數ceil()進行上取整,當然floor()函數可以下取整。這兩個函數所在的頭文件都是math.h。

代碼實現:

#include <iostream>
#include<math.h>
using namespace std;
int main()
{
	int w,  n;
	float x,y;
	while (cin >> w >> y >> x >> n)
	{
		for (int i = 0; i < n; ++i)
		{
			++y;
			y = (1 - x) * w * y + 21 * x * w;
			y /= w;
		}
		cout << ceil(y) << endl;
	}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章