概述
这个。。。。本来以为很简单的题!!!!我写了两个小时!!!!!【不过主要还是我太太太太太太太辣鸡了(:з」∠)是真真真真真真真真辣鸡】
debug的时候发现第三次合并的时候MAX和MIN的值就是上一次合并的时候的值了,并没有递归回去被更新,于是上网搜了题解,发现只要每次重新定义一次MAX和MIN就行了,这种错误要记住。
#include <cstdio>
int a[105], MAXX, MINN;
void divide(int l, int r, int &MAXX, int &MINN)
{
if (l == r)
{
MAXX = a[l];
MINN = a[r];
}
else if (r == l + 1)
{
if (a[r] > a[l])
{
MAXX = a[r]; MINN = a[l];
}
else
{
MAXX = a[l]; MINN = a[r];
}
return;
}
else
{
int d = (l + r) / 2;
int MAX1, MIN1;
divide(l, d, MAX1, MIN1);
int MAX2, MIN2;
divide(d + 1, r, MAX2, MIN2);
if (MAX1 > MAX2)
{
MAXX = MAX1;
}
else
{
MAXX = MAX2;
}
if (MIN1 < MIN2)
{
MINN = MIN1;
}
else
{
MINN = MIN2;
}
}
//printf("%d %dn", MAXX, MINN);
}
int main()
{
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
}
divide(1, n, MAXX, MINN);
printf("%d %dn", MAXX, MINN);
return 0;
}
不过好像说这样然并卵,因为比较次数并没有减少。反正比赛的时候也不会去写这么一长串的,不管了。
最后
以上就是魁梧皮皮虾为你收集整理的用分治法求MAX和MIN的全部内容,希望文章能够帮你解决用分治法求MAX和MIN所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复