华为8.11机试第三题

麻了,考试时便秘,考完试贼通畅,第一题大家都能过部分,第二题没写,第三题刚才想了想,写了一下
题意:坑里面放木块,高于地平面不放,输入:木块宽度n(高为1),坑宽度m,数组(m个数字,表示地面高低)
输出:能放几块
请大佬指正!
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//从上往下一层一层递归
void maxnums(vector<int>data, int &ret, int n, int m)
{
	int maxdeep = 0;
	for (int i = 0; i < m; i++)
	{
		maxdeep = min(maxdeep, data[i]);
	}
	if (maxdeep >= 0)return;
	for (int i = 0; i < m; i++)
	{
		if (data[i] <= -1)
		{
			int num = 0;
			while (data[i] <= -1)
			{
				num++;
				i++;
			}
			ret += num / n;
		}
	}
	for (int i = 0; i < m; i++)
	{
		data[i]++;
	}
	maxnums(data, ret, n, m);
}
int main()
{
	int n = 2, m = 4;//2 4
	vector<int>data{ 0,-1,-2,0 };//0 -1 -2 0
	int ret = 0;
	maxnums(data, ret, n, m);
	cout << ret << endl;
	return 0;
}


#笔试题目##华为#
全部评论
目前看到没有没有bug的解法了
1 回复
分享
发布于 2021-08-14 12:33
第一题的输入你是怎么处理的?
点赞 回复
分享
发布于 2021-08-15 14:05
博乐游戏
校招火热招聘中
官网直投
每道题两百分吗,听说过100就OK?
点赞 回复
分享
发布于 2021-08-16 21:55
兄弟这道题还有题干的记录嘛,想仔细钻研一下
点赞 回复
分享
发布于 2021-08-16 22:16
第二个for循环是不是用while循环更好
点赞 回复
分享
发布于 2021-08-25 16:27
谢谢分享! 第19行,上一轮i++后可能越界,应该增加一句判断:while ((i < n) && (data[i] <= -1)) 然后,main()开头输入写一下cin >> string再转vector<int>就完美了
点赞 回复
分享
发布于 2021-09-22 22:05

相关推荐

1 34 评论
分享
牛客网
牛客企业服务