csp认证考试--最大的矩形,求助,望大神解惑

wendao1990 2020-03-18 09:49:09

我自己编写的代码

#include <stdio.h>

#define bool char
#define true 1
#define false 0

int chazhao(int i, int n, int num[], bool zhengxu);

int main(){
int count = 0;
int num[1001] = {0};
scanf("%d", &count);
int mj = 0;
for(int i = 0; i < count; i++){
scanf("%d", &num[i]);
}
for(int i = 0; i < count; i++){
mj = (chazhao(i, count, num, true) > mj ? chazhao(i, count, num, true) : mj);
}
for(int i = count - 1; i >= 0; i--){
mj = (chazhao(i, count, num, false) > mj ? chazhao(i, count, num, false) : mj);
}
printf("%d\n", mj);
return 0;
}

int chazhao(int i, int n, int num[], bool zhengxu)
{
int count = 0;
if(zhengxu){
for(int j = i; j < n; j++){
if(num[i] > num[j])
break;
else
count++;
}
}
else{
for(int j = i; j >= 0; j--){
if(num[i] > num[j])
break;
else
count++;
}
}
return num[i] * count;
}



得分30分,求大神解惑
...全文
1341 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 39 楼 智者知已应修善业 的回复:
举个例子说明,就是返回年的月日子,能直接给出的何必使用数组?

int 返回月的天数(int 年, int 月)
{//缘由https://bbs.csdn.net/topics/395074486
return (月 == 2 ?
((((!(年 % 4) && 年 % 100) || !(年 % 400)) ? 1 : 0) ? 29 : 28) :
(((月 <= 7 && 月 % 2) || (月>7 && !(月 % 2))) ? 31 : 30));
}


90009同学你又上课鼓捣小代码不听讲,你写这么长垃圾代码比12字节数组占的空间大很多~~~
  • 打赏
  • 举报
回复
老师(敲黑板):90009同学注意听讲!你整天鼓捣小学级别的代码自我感觉良好将来能找到工作吗,不知道世界有多大~ 老师两分钟划拉一下你鼓捣5天的代码让你开开眼...

#include <stdio.h>

int main()
{
for (int n, m[1000], h, l, r, a; a = 0, scanf("%d", &n) == 1;)
{
for (h = 0; h < n; h++) scanf("%d", &m[h]);
for (h = 0; h < n; h++)
{
for (l = h - 1; l >= 0 && m[l] >= m[h]; l--);
for (r = h + 1; r < n && m[r] >= m[h]; r++);
if (m[h] * (r - l - 1) > a) a = m[h] * (r - l - 1);
}
printf("%d\n", a);
}

return 0;
}

  • 打赏
  • 举报
回复
中文函数名变量名就把某人废了真是匪夷所思!虾米理由一堆匪夷所思!! 另外,正常的交流是欢迎的,就是不会去理会精神高尚反面典型的去言语.
千梦一生 2020-03-25
  • 打赏
  • 举报
回复
引用 46 楼 智者知已应修善业 的回复:
某些毫无逻辑的分析,以为发出来会显得其有多么高明,其实毫无逻辑可言,此等辈人,不足与语,亦不可教,已无可救药。

为什么无逻辑呢?
千梦一生 2020-03-25
  • 打赏
  • 举报
回复
引用 47 楼 智者知已应修善业 的回复:
你看我好面子,我看你未必就是不好面子,这样去论有意义?

######

千梦一生 2020-03-25
  • 打赏
  • 举报
回复
引用 45 楼 智者知已应修善业 的回复:
是你自己主动贴上的标签,不关我的事。
有些话自己没的话为何要主动贴?是学生?去玩你的教条去。
已经说了,能懂中文就看,不看也没虾米关系。
别忘了是中文的奶水把你养大,有难忘的中文味道,看个中文写的代码就那么难?难倒你也活该,还准确推断别人看不懂,算你猜对了,你那些话就能让人解惑了?就一定能有益于人?难道你就不觉得自己有主观臆测?不跟你论编成以外的话题,之所以还能回复就是还尊重你,所谓的面子还是你的臆测不是?
某些说虾米同学或老师,那是做梦,根本就不可能,与此等辈人称同学甚感为耻,也是决不可能的,莫学此等辈人。
言尽与此。这个论坛也没人管管这些无关的内容,其先发个表情图都管,这些怎么不管?怪哉!
引用 43 楼 千梦一生 的回复:

一个一个说这个:
1.你说的对,我是主动贴,这是事实。
2.但还有一个事实,你、我、任何其它看到的人都很清楚。我虽然是主动这么说,但你在之前回复呢?
比如,
引用 29 楼 智者知已应修善业 的回复:
想复杂了或简单了不行?难道也想标榜自己100%正确,从来就没错过?或是精神高尚?从而证明自己是圣人?假如未必能证明自己就是圣人,那也只是凡人而已。
假如是外国人就别看我的代码了,或带个翻译来读,自觉没机会与国际合作,也不逛外国论坛,假若有需要相信我是个活人,听说近来归国避难新冠病毒的就有觉得高国人一等的思想,若外国好何必回国?反过来就不说想了。。。今第一次不妨说说,后不再。

这个意思有或者没有?否认吗?也甚至确实是我误读了,如果误读了。真的很对不起,这是我的错误,向您道歉。
后面

引用 36 楼 智者知已应修善业 的回复:
中文函数名变量名就把某人废了真是匪夷所思!虾米理由一堆匪夷所思!!

另外,正常的交流是欢迎的,就是不会去理会精神高尚反面典型的去言语.

这又在说些啥玩意儿?你可以否认。也甚至可能确实也是我误会了你的意思、态度。那样的话,我再次向您道歉,很对不起。

3.关于是否准确推断别人看不懂这个问题:那些我并不关心。“以及别忘了(有点意思。说实话,您话里藏的意思太多了。)我是吃中文奶水长大的云云”,真的又要再次上升一下话题么?而且,这逻辑有点古怪。
回过头来,您不必说我看不看的懂得问题了,当我看的懂也好,看不懂也好,您想怎么认为都行。
我所说的那些,只是自己的观点,个人觉得也许对您有利,向您提出相关的想法、建议而已。为什么我个人觉得对您有利,从而尝试与您说上这些呢?之前举的例子相信您肯定也是看过的。我再说一个场景:您说,假如您有机会与很多中国大佬们交流一些问题,大家都是精英人士,英语自然也是顺溜。可是都很平常的说着中文、您却说着英语。也许整个交流都也还是比较顺畅,大家都听的懂。但你觉得他们会如何看待您呢?是否存在可能因此往后尽量避免与您进行其它的一些学术交流、从而错失一些或可能进步的机会?这个问题我是觉得有可能的。所以向您提出自己的看法而已
4.确实,这点我的错。我也是主观判断。说明我自己思想境界确实不够,从我们之间简单的几次交流、对话,就做出此等判断也确实有点不符合,有些草率。这样的判断至少确是依据仍是少了一些,而且没有充分的客观证据,在这个上面是应该向您道歉的,非常抱歉。

请您注意第三点,我在此上的态度,仍是那样的,仅供参考,个人看法,个人觉得我的思路应该会好一些,尝试与您的建议,仅此。故而并不代表我说的一定是正确的或者唯一正确的,只是希望我的看法与您有所参考、或有所思。
千梦一生 2020-03-25
  • 打赏
  • 举报
回复
刚去翻了下这位前辈以前的贴子,发现这位前辈用中文命名已是由来已久了。能坚持这么久,这一点上就值得钦佩。看得出来也并非我这些话语就会轻易动摇之人。

不过,我说的只是在说我自己的观点而已。任何人看了都可以采纳、可以参考、可以拒绝,那与我是没有关系的。

我的看法是:有自己的态度、想法是完全ok的,这种态度是真的很棒,能保持独立思考的人其实并不太多,但不可过而偏激
我清楚的认识到“空穴来风”的意思是,形容必定有原因,不可能凭空产生
但我在与别人沟通的时候,从来没有用它来形容这个意思。因为在口语中,它的意思已经被约定俗成了。

过去在字典中规定的是“曝光”,读pu guang。大家都读bao guang。最后人们没改,规定改了。

这位前辈,用中文定义变量没什么问题,没有规定说不能用。但在如今的程序员交流的环境中,这是小众的,非主流的。并不利于沟通,并且也很难说让别人迁就与自己。
如果说:未来什么时候,大家开始惯用中文写代码,命名,而还有谁还在坚持用English。我会支持这位老师,反而说他的问题。
千梦一生 2020-03-25
  • 打赏
  • 举报
回复
得把我笑死。确实有点好面子。
其实我说的那些已经够委婉了。还是觉得面子落不下。

就事论事别扯太多有的没的,你之前臆想:我标榜自己100%正确,好像看不起谁似的。
这儿又臆想:某人精神高尚反面典型的去言语。

扯皮就得了吧,把我的思维拉到你所理解的环境中,再用你那丰富的经验打败我?
咱们虽然不是做多大学问的人,但多少也是写代码的讲逻辑讲道理。对待事情就事论事就好了。别乱说些有的没的
  • 打赏
  • 举报
回复
代码如下:
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
const int maxn = 1e3+5;
struct node{
	int height;
	int width;
};
int n,height,top,index;
ll res,tmp;
node stack[maxn];
int main(){
	while(cin>>n){
		res = tmp = 0;
		for(int i = 0;i < n ;i++){
			scanf("%d",&height);
			index = 0;
			while(top > 0 && stack[top-1].height >= height){
				tmp = stack[top - 1].height * (stack[top-1].width + index);
				res = max(res,tmp);
				index += stack[top-1].width;
				top--;
			}
			 .height = height;
			stack[top].width = 1 + index;
			top++;
		}
		index = 0;
		while(top > 0){
			tmp = stack[top - 1].height * (stack[top-1].width + index);
			res = max(res,tmp);
			index += stack[top-1].width;
			top--;
		}
		cout<<res<<endl;
	}
}
  • 打赏
  • 举报
回复
单调栈问题。
  • 打赏
  • 举报
回复
xianfajushi俗称90009同学(为什么叫这个名字是有典故的,看他以前的帖子就知道了),是个脑子秀逗,爱闹笑话的人,你不能跟他太较真~~~
千梦一生 2020-03-23
  • 打赏
  • 举报
回复
这是个人观点,之前可能没有认真阐述,供您参考:
说几个事实的现象:
看您账号都有十几年了,很显然也是一名非常喜欢交流、讨论的人。
有这么一个问题:
如果两个人,都提出同一个问题,希望能得到大家的帮助。
一个贴出的代码是英文的命名,一个贴出的是中文的命名。您觉得哪个更舒服?
或者更进一步,一个贴出的代码格式、用法都很普通平常,另一个贴出的代码疯狂压行,格式极乱。您更愿意帮谁看?

个人认为这是一个同理的问题:同样中文我当然也认得。您写的那些代码,或者那些疯狂压行的代码也能慢慢读出意思来。但是,不得不承认的是,这对尝试帮助者、或者尝试讨论者读者并不友好。

规则自然是有制订者、带头者。但个人以为:最终的形态终究以人们约定俗称的方式作为最终的标准。
比如老师让大家讨论一下这道题的解法,大家都很自然的说着中文,讨论着解法。我也积极参与,但就是要是说英文。也许我的思路有可能很棒,但又有几个人能耐心的理解呢?

您回复这个帖子也不是一两次、亦不是一两天,足以看出您确实是乐于思考讨论,乐于交流的,像我看见您给出代码后也是欢迎大家交流沟通的。所以您可以在想一想,或许没有必要用这种方式将可能的讨论者拒之门外呢?

最后重点说一点:我没有什么意思让您改变您的观点,没有能力也没有资格。所以如开头所言,只是个人看法,供您参考。
  • 打赏
  • 举报
回复
90009同学最爱闹笑话了~~~
千梦一生 2020-03-22
  • 打赏
  • 举报
回复
代码太难读了,不符合大多数人的阅读习惯。
  • 打赏
  • 举报
回复
睡足醒来,精神饱满,修改了一下程序,不含优化,认为现在应该已无瑕疵,欢迎指正,感谢关注。
千梦一生 2020-03-22
  • 打赏
  • 举报
回复
引用 29 楼 智者知已应修善业 的回复:
这样一改矩形就能头尾互寻,前后循环后的2句判断直接++ --,从而可以融合为一句(--k - ++j +1),若见怪就当我多言了,有空看看我的代码,难得平语,我这样写出于另一个方面的考量,循环多了。

[quote=引用 26 楼 lirg8405 的回复:]
代码边界判断少了个=,把j>0 修改为j>=0


这一贴我看已有不少人访问没回复,怎么我一回复,连带就来了这么多。

想复杂了或简单了不行?难道也想标榜自己100%正确,从来就没错过?或是精神高尚?从而证明自己是圣人?假如未必能证明自己就是圣人,那也只是凡人而已。
假如是外国人就别看我的代码了,或带个翻译来读,自觉没机会与国际合作,也不逛外国论坛,假若有需要相信我是个活人,听说近来归国避难新冠病毒的就有觉得高国人一等的思想,若外国好何必回国?反过来就不说想了。。。今第一次不妨说说,后不再。[/quote]
??不是,我就很平常的一说。怎么那么急躁呢?
我说是事实啊,就是中国人,我想大多数人也很少将变量那些定义为中文吧。所以我这里说错了?
还含沙射影意思说啥外国人啥的,阴阳怪气。
你意思是要升级到什么民族啥啥啥的?那怎么不用易语言啊,至少还有个名头说国产语言。
有一个事情您可能误解了,我说的就那样,有什么说什么。而且并没有什么特别的意思啊?您想复杂了是不是?对吧。我说你错了吗?我如果没说你错了,你却说我什么标榜自己100%正确这些,是不是无稽之谈?是不是主管臆断?

如果你说,我不去解释算法、代码,而直接说您想复杂了,说您哪里哪里不对。看上去,确实是我有点把自己摆得太高了。
可是您之前的回复,有没有认真思考看过他的回复、或者我的回复。他和我都已经将那个算法、思路说过一遍了
我是看已经解释过两次这个算法原理了,所以我才没有再这次的回复中将这个算法原理再重复一次的。


火气有点大啊,消消气。讨论问题而已,都别把自己放太高。如果我确实说错了,您指出来即是,比如您的想法确实更好,向您学习一下,叫您一声老师,都是没有问题的。比如这次我谁的想法更好、却不一定下次谁又有更好的思路了呢?是吧。

总之最后再说一句吧,看您有点生气。很明显是有误会的,至少我的回复,没有您所设想的那些。但既是让您有些生气,那我多少也是有一定原因的。所以,就此的话,也是可以给您说一声抱歉,引起您的误会了呢?
千梦一生 2020-03-22
  • 打赏
  • 举报
回复
引用 27 楼 智者知已应修善业 的回复:
应该不止这组数据,其他数据能确保正确?
引用 26 楼 lirg8405 的回复:

你想复杂了,你看看他说的算法。
挺寻常的算法而已。再强一点的算法可能只能交给真正的数学大佬看看有没有机会。
lirg8405 2020-03-22
  • 打赏
  • 举报
回复
引用 21 楼 智者知已应修善业 的回复:
题目的用例只给一个,实在是可以让设计的思路跑偏,因为,大部分精力和思路都用在实现目前用例的思路上了,完成后也没想那么多,同时,也发现了我写的问题了,解决问题是思路也有了,不妨再酝酿一段时间,待空闲实现一下,再看看是否都正确。 用你的代码测试了6个数据,这组数据最大应该是6*7=42.
代码边界判断少了个=,把j>0 修改为j>=0
lirg8405 2020-03-22
  • 打赏
  • 举报
回复
修改一下代码,判断少了一个=
引用 15 楼 lirg8405 的回复:

void fund_findmax()
{
	int nCount = 0;
	printf("请输入矩形的数量:");
	scanf("%d", &nCount);
	if (nCount < 1 || nCount > 1000)
	{
		printf("输入不合法!\n");
		return;
	}
	int nArray[1000] = {0};
	for(int i=0; i<nCount; i++)
	{
		scanf("%d", &nArray[i]);
	}

	int nMax = 0;
	for(int i=0; i<nCount; i++)
	{
		//向前找
		int j=i-1;
		while(j >= 0) //这里修改为>=
		{
			if (nArray[j] < nArray[i])
			{
				break;
			}
			j--;
		}
		if (j < 0) j = 0;
		else j++;

		//向后找
		int k = i+1;
		while(k < nCount)
		{
			if (nArray[k] < nArray[i])
			{
				break;
			}
			k++;
		}
		if (k == nCount) k = nCount-1;
		else k--;

		int nTemp = (k-j+1)*nArray[i];
		if (nTemp > nMax) nMax = nTemp;

	}

	printf("最大的矩形面积是:%d\n", nMax);
}

  • 打赏
  • 举报
回复
测试了一下你的代码,结果如下,对?

引用 19 楼 lirg8405 的回复:

加载更多回复(9)

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧