4.3西山居笔试题编程题

两题都AC了,老费力了,由于前面很拉,所以这里我尽力做到了全A,希望能进面吧

顺便分享一下本地的代码:

编程题1:

剑指offer中等难度原题,动态规划的,很简单不说了

编程题2:

开心消消乐咯,找一次能消除最多方块的位置进行消除,直到消除完需要多少步,每一步是那个位置;

(近百行代码用模拟暴力做的,实在不知道怎么优化)

/*
m*n个方格
0 表示无方块, 1表示有方块
指定x,y位置消除这一行一列
每次指定最多可消除的位置,并求多少次能消除完


输出多少步
3 4
0 1 0 0
0 1 0 1
0 1 1 1

输出消除位置x,y;
2
3,2
2,4
*/


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


int m = 0, n = 0;//棋盘宽高
int maxi = 0, maxj = 0;//消除最多方块的位置
int res[100][100];//存储每次消除方块的位置 
bool a[100][100];//存储棋盘 
int  b[100][100];//存储对应位置的最大可消除方块数量 


//计算当前方块可消除数 
int f(int x, int y){
	int ans = 0;
	for(int i = 1; i <= n; i++){
		if(a[x][i]) ans++;
	}
	for(int i = 1; i <= m; i++){
		if(a[i][y]) ans++;
	}
	return ans;
}


//计算是否消除完毕 , true 表示还有, false 表示没了 
bool isT(){
	bool flag = false;
	for(int i = 1; i <= m; i++){
    	for(int j = 1; j <= n; j++){
    		if(a[i][j]){
    			flag = true;
			}
		}
	}
	return flag;
} 


int main(){
	cin>>m>>n;
	for(int i = 1; i <= m; i++)
        for(int j = 1; j <= n; j++)
            cin>>a[i][j];
    
	for(int i = 0; i < 100; i++){
		for(int j = 0; j < 100; j++){
        	res[i][j] = 0;
        	b[i][j] = 0; 
		}
	} 
            
	//计算消除最多的方块的位置,并消除 后把ans +1 
	int k = 0, retans = 0;
	while(isT()){
		int maxnum = 0;
		
		for(int i = 1; i <= m; i++){
			for(int j = 1; j <= n; j++){
        		if(a[i][j]){
        			b[i][j] = f(i, j);
        			if(b[i][j] > maxnum){
        				maxnum = b[i][j];
        				maxi = i;
        				maxj = j;
					}
				}
			}
		}
		res[k][0] = maxi;
		res[k][1] = maxj;
		k++;	
		for(int i = 1; i <= n; i++)
			if(a[maxi][i]) a[maxi][i] = 0;
		for(int i = 1; i <= m; i++)
			if(a[i][maxj]) a[i][maxj] = 0;
		retans++;
	}
	cout<<retans<<endl;
	for(int i = 0; i < 100; i++){
    		if(res[i][0] != 0 || res[i][1] != 0){
    			cout<< res[i][0] << "," << res[i][1] << endl;
			} else if(res[i][0] == 0 || res[i][1] == 0) break;
	}
	return 0;
}
#我的实习求职记录##互联网没坑了,还能去哪里?##我的求职思考##如何判断面试是否凉了##在找工作求抱抱#
全部评论
第二题删除顺序是不是答案不唯一,还是我题意没理解对
2 回复 分享
发布于 2023-04-10 14:51 广东
做法跟你一样😂,当时我都感觉过不了,结果ac了
1 回复 分享
发布于 2023-04-03 23:38 广东
提交的时候通过用例就是ac了嘛?
1 回复 分享
发布于 2023-04-04 00:44 四川
老哥啥岗位 进面没
1 回复 分享
发布于 2023-04-07 22:28 黑龙江
好早就做了笔试,之后就没消息了😥
1 回复 分享
发布于 2023-04-09 11:32 广东
老哥前面都是些啥题大概
1 回复 分享
发布于 2023-04-09 21:46 广东
三月上旬就写了笔试也a了但也没消息😅估计寄了
1 回复 分享
发布于 2023-04-21 15:41 北京
优化就是,事先统计好每行的1的个数rowCount和每列的1的个数colCount,然后每次选取的位置肯定是rowCount中最大值的那一行和colCount中最大值的那一列组成的位置,注意消除该位置后要动态更新rowCount和colCount数组。
1 回复 分享
发布于 2023-04-25 15:38 北京

相关推荐

10-30 14:43
测试开发
点赞 评论 收藏
分享
4 13 评论
分享
牛客网
牛客企业服务