2020華爲暑期實習筆試題

1.判斷IP地址是否屬於同一網段

在這裏插入圖片描述

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;

int main()
{
	int mask1 = 0, mask2 = 0, mask3 = 0, mask4 = 0;
	char ch;
	string inputstr;
	stringstream ss;
	while (cin >> inputstr)
	{
		int ip1a = 0, ip1b = 0, ip1c = 0, ip1d = 0;
		int ip2a = 0, ip2b = 0, ip2c = 0, ip2d = 0;
		ss << inputstr;
		ss >> mask1 >> ch >> mask2 >> ch >> mask3 >> ch >> mask4;
		ss.clear();
		cin >> inputstr;
		ss << inputstr;
		ss >> ip1a >> ch >> ip1b >> ch >> ip1c >> ch >> ip1d;
		ss.clear();
		cin >> inputstr;
		ss << inputstr;
		ss >> ip2a >> ch >> ip2b >> ch >> ip2c >> ch >> ip2d;
		ss.clear();
		if ((mask1 > 255 || mask1 < 0) || (mask2 > 255 || mask2 < 0) || (mask3 > 255 || mask3 < 0) || (mask4 > 255 || mask4 < 0)
			|| (ip1a > 255 || ip1a < 0) || (ip1b > 255 || ip1b < 0) || (ip1c > 255 || ip1c < 0) || (ip1d > 255 || ip1d < 0)
			|| (ip2a > 255 || ip2a < 0) || (ip2b > 255 || ip2b < 0) || (ip2c > 255 || ip2c < 0) || (ip2d > 255 || ip2d < 0))
			cout << 1 << endl;
		else if (((mask1 & ip1a) == (mask1 & ip2a)) && ((mask2 & ip1b) == (mask2 & ip2b)) && ((mask3 & ip1c) == (mask3 & ip2c)) && ((mask4 & ip1d) == (mask4 & ip2d)))
			cout << 0 << endl;
		else
			cout << 2 << endl;
	}
	return 0;
}

2. 搜索矩陣

在這裏插入圖片描述

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main{
	int N;
	while (cin >> N){
		vector<string> matrix(N);
		for (size_t i = 0; i < N; i++)
		{
			cin >> matrix[i];
		}
		int M = matrix[0].size();	//N行M列
		//初始化DP矩陣
		vector<vector<int>> dp;
		for (size_t i = 0; i < N; i++)
		{
			vector<int> dp_(M);
			dp.push_back(dp_);
		}
		//初始化列
		int maxsqlen = 0;
		for (size_t i = 0; i < N; i++)
		{
			dp[i][0] = matrix[i][0] - '0';
			if (dp[i][0] > maxsqlen)
				maxsqlen = dp[i][0];
		}
		//初始化行
		for (size_t i = 0; i < M; i++)
		{
			dp[0][i] = matrix[0][i] - '0';
			if (dp[0][i] > maxsqlen)
				maxsqlen = dp[i][0];
		}
		//求解DP
		for (size_t i = 1; i < N; i++)
		{
			for (size_t j = 1; j < M; j++) {
				if (matrix[i][j] == '1') {
					dp[i][j] = min(min(dp[i - 1][j - 1], dp[i - 1][j]), dp[i][j - 1]) + 1;
					maxsqlen = maxsqlen > dp[i][j] ? maxsqlen : dp[i][j];
				}
			}
		}
		cout << maxsqlen * maxsqlen << endl;
	}
}

3.奧特曼打怪

在這裏插入圖片描述

#include <bits/stdc++.h>
using namespace std;
const int MAX = 60;

void walkup(int gird[MAX][MAX], int i, int j, int N, int tempAns, int& trueAns){
	if(i == 0 && j == 0){
		if(trueAns < tempAns){
			trueAns = tempAns;
		}
	}
	else if(i == 0){
		if(gird[i][j] == 0){
			walkup(gird, i, j-1, N, tempAns, trueAns);
		}
		else if(gird[i][j] == 1){
			gird[i][j] = 0;
			walkup(gird, i, j-1, N, tempAns+1, trueAns);
			gird[i][j] = 1;
		}
	}
	else if(j == 0){
		if(gird[i][j] == 0){
			walkup(gird, i-1, j, N, tempAns, trueAns);
		}
		else if(gird[i][j] == 1){
			gird[i][j] = 0;
			walkup(gird, i, j-1, N, tempAns+1, trueAns);
			gird[i][j] = 1;
		}
	}
	else{
		if(gird[i][j] == 0){
			walkup(gird, i-1, j, N, tempAns, trueAns);
			walkup(gird, i, j-1, N, tempAns, trueAns);
		}
		else if(gird[i][j] == 1){
			gird[i][j] = 0;
			walkup(gird, i-1, j, N, tempAns+1, trueAns);
			walkup(gird, i, j-1, N, tempAns+1, trueAns);
			gird[i][j] = 1;
		}
	}
}


void walkdown(int gird[MAX][MAX], int i, int j, int N, int tempAns, int& trueAns){
	if(i == N-1 && j == N-1){
		if(gird[i][j] == 0){
			walkup(gird, i-1, j, N, tempAns, trueAns);
			walkup(gird, i, j-1, N, tempAns, trueAns);
		}
		else if(gird[i][j] == 1){
			walkup(gird, i-1, j, N, tempAns+1, trueAns);
			walkup(gird, i, j-1, N, tempAns+1, trueAns);
		}
	}
	else if(i == N-1){
		if(gird[i][j] == 0){
			walkdown(gird, i, j+1, N, tempAns, trueAns);
		}
		else if(gird[i][j] == 1){
			gird[i][j] = 0;
			walkdown(gird, i, j+1, N, tempAns+1, trueAns);
			gird[i][j] = 1;
		}
	}
	else if(j == N-1){
		if(gird[i][j] == 0){
			walkdown(gird, i+1, j, N, tempAns, trueAns);
		}
		else if(gird[i][j] == 1){
			gird[i][j] = 0;
			walkdown(gird, i+1, j, N, tempAns+1, trueAns);
			gird[i][j] = 1;
		}
	}
	else{
		if(gird[i][j] == 0){
			walkdown(gird, i+1, j, N, tempAns, trueAns);
			walkdown(gird, i, j+1, N, tempAns, trueAns);
		}
		else if(gird[i][j] == 1){
			gird[i][j] = 0;
			walkdown(gird, i+1, j, N, tempAns+1, trueAns);
			walkdown(gird, i, j+1, N, tempAns+1, trueAns);
			gird[i][j] = 1;
		}
	}
}

int main()
{
	int gird[MAX][MAX];
	int dp[MAX][MAX];
	for(int i = 0; i < MAX; i++){
		for(int j = 0; j < MAX; j++){
			gird[i][j] = 0;
			dp[i][j] = 0;
		}
	}
	int N;
	cin >> N;
	for(int i = 0; i < N; i++){
		for(int j = 0; j < N; j++){
			cin >> gird[i][j];
		}
	}
	
	// 從上往下走
//	for(int i = 0; i < N; i++){
//		for(int j = 0; j < N; j++){
//			if(gird[i][j] == 0){
//				dp[i][j] = dp[i][j-1] > dp[i-1][j] ? dp[i][j-1] : dp[i-1][j];
//			}
//			else if(gird[i][j] == 1){
//				dp[i][j] = dp[i][j-1] > dp[i-1][j] ? dp[i][j-1] : dp[i-1][j];
//				dp[i][j]++;
//			}
//			else{
//				dp[i][j] = -1;
//			}
//		}
//	}
	
	int tempAns = 0;
	int trueAns = 0;
	walkdown(gird, 0, 0, N, tempAns, trueAns);
	cout << trueAns << endl;
	
	return 0;
}

Reference

https://blog.csdn.net/weixin_43194305/article/details/105108814

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