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 广东
优化就是,事先统计好每行的1的个数rowCount和每列的1的个数colCount,然后每次选取的位置肯定是rowCount中最大值的那一行和colCount中最大值的那一列组成的位置,注意消除该位置后要动态更新rowCount和colCount数组。
1 回复 分享
发布于 2023-04-25 15:38 北京
三月上旬就写了笔试也a了但也没消息😅估计寄了
1 回复 分享
发布于 2023-04-21 15:41 北京
老哥前面都是些啥题大概
1 回复 分享
发布于 2023-04-09 21:46 广东
好早就做了笔试,之后就没消息了😥
1 回复 分享
发布于 2023-04-09 11:32 广东
老哥啥岗位 进面没
1 回复 分享
发布于 2023-04-07 22:28 黑龙江
提交的时候通过用例就是ac了嘛?
1 回复 分享
发布于 2023-04-04 00:44 四川
做法跟你一样😂,当时我都感觉过不了,结果ac了
1 回复 分享
发布于 2023-04-03 23:38 广东

相关推荐

简答题1.&nbsp;请写出你玩过并且印象深刻的游戏的名称、你累计玩的时间、水平以及对该游戏的简要评价,请写出5-10款。(包括街机游戏、家用机游戏、电脑单机/网络游戏、手机单机/网络游戏)2.&nbsp;你在玩游戏的过程中有没有碰到过什么bug,有没有想过为什么出现这样的问题,请分别列举。3.&nbsp;现有2个空水壶,容积分别为5升和6升,如何只用这2个水壶取得3升的水?请写出操作过程(不能借助别的容器)4.&nbsp;一位年轻的女士计划去体育馆游泳,她准备了一个干湿分离的背包、泳衣、浴巾、拖鞋,请问你认为她可能还遗漏了什么物品?5.&nbsp;假设游戏内有一种奖励数值,规则如下:玩家购买后可立即领取1000金币,后续有10档奖励,每档可领取200金币,玩家通过游戏内活动可累计活跃值,当活跃值达到时则可领取档位奖励。奖励领取是独立的,例如123档都可领取,玩家可选择只领取1和3的奖励。如果0表示该档位不可领取,1表示可以领取,2表示已经领取。例如:1-0-0-0-0-0-0-0-0-0-0表示该玩家购买了该数值,还未领取奖励且没有累计活跃值。请根据等价类划分的思想列出你认为具有代表性的领取状态组合。6.&nbsp;假设玩家获得某个物品的概率是nBase,if&nbsp;Random(1,&nbsp;100000000)&nbsp;&lt;nBase1000000100&nbsp;then&nbsp;可以获得&nbsp;else&nbsp;不可获得。如果将计算公式变为Random(1000000,&nbsp;100999999)&lt;nBase*100999999,你认为结果与原来的计算相比会有什么不同?7.&nbsp;你有什么特别的能力或者爱好、经历对你应聘这个职位是有帮助的,请简要说明。8.&nbsp;请描述到现在为止你觉得对你人生影响最大的事情是什么?请详细描述其过程以及对你的影响。编程题消除重复字符给出由全部小写字母组成的字符串str,遍历该字符串,删除任意两个相邻且相同的字母,并在删除后的字符串上反复执行该相邻字符重复项的删除操作,直到剩余的字符串没有相邻的重复字符,并返回最终的字符串。&nbsp;输入:```abccbada```&nbsp;输出```da```&nbsp;计算素数计算小于给定整数N的所有素数的个数,考虑N较大的情况。如输入N=10时,返回4。
查看8道真题和解析 投递西山居等公司6个岗位
点赞 评论 收藏
分享
评论
4
14
分享

创作者周榜

更多
牛客网
牛客企业服务