京东笔试第一题,36%

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

//判断联通个数
int liantong(vector<vector<int>> nums, int i, int j, int val){
	if (i >= 0 && i < 5 && j >= 0 && j < 5){
		if (nums[i][j] == val){
			nums[i][j] = 0;
			return 1 + liantong(nums, i - 1, j, val) + liantong(nums, i + 1, j, val) + liantong(nums, i, j + 1, val) + liantong(nums, i, j - 1, val);

		}
		else
			return 0;
	}
	else
		return 0;
}

//删除联通元素
void del_nums(vector<vector<int>> &nums, int i, int j, int val){
	if (i >= 0 && i < 5 && j >= 0 && j < 5){
		if (nums[i][j] == val){
			nums[i][j] = 0;
			del_nums(nums, i - 1, j, val);
			del_nums(nums, i + 1, j, val);
			del_nums(nums, i, j + 1, val);
			del_nums(nums, i, j - 1, val);

		}
		else
			return ;
	}
	else
		return ;
}

int main(){
	vector<vector<int>> board(5, vector<int>(5, 0));
	for (int i = 0; i < 5; ++i)
	    for (int j = 0; j < 5; ++j)
		    cin >> board[i][j];
	int m = 5, n = 5;
	for (int i = 0; i < m; ++i) {
		for (int j = 0; j < n; ++j) {
			if (board[i][j] == 0) continue;
			if (liantong(board, i, j, board[i][j]) >= 3){
				del_nums(board, i, j, board[i][j]);
				for (int j = 0; j < n; ++j) {
					int t = m - 1;
					for (int i = m - 1; i >= 0; --i) {
						if (board[i][j]) swap(board[t--][j], board[i][j]);
					}
				}
			}
				
		}
	}

	int result = 0;
	for (int i = 0; i < 5; ++i){
		for (int j = 0; j < 5; ++j){
			if (board[i][j] != 0)
				result++;
		}
	}
	cout << result << endl;

	return 0;
}
也不知道错哪里了
#京东##笔试题目#
全部评论
我直接输出2也是36%😂
点赞 回复 分享
发布于 2019-08-24 21:09

相关推荐

02-11 17:51
腾讯_TEG_技术
点赞 评论 收藏
分享
01-02 21:17
已编辑
西安理工大学 后端
程序员小白条:项目不太重要,你的优势的算法竞赛,然后多背相关的八股文,项目可以不作为重点考虑,面试可能就简单带过项目就行了,你可以直接写简历,背项目相关的八股文就行,也不用自己做,时间紧张的情况下,性价比最高
点赞 评论 收藏
分享
2024-12-29 15:37
已编辑
西华大学 图像识别
程序员牛肉:去不了,大厂算法卡学历吧
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务