蒟蒻C语言用堆只过了1个,求教大佬
查看原帖
蒟蒻C语言用堆只过了1个,求教大佬
567903
BUAA小学生楼主2022/3/9 16:27
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>

int n;
long long s[100000];
long long sum; 
void BUILD_SMALLHEAP(long long[]);
void MAKE_UP(int);
int main()
{
	int i,end;
	long long a1,a2;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%lld",&s[i]);
	}
	BUILD_SMALLHEAP(s);
	end = n;
	for(i=1;i<=(end-1);i++)
	{
		a1 = s[1];
		s[1] = s[n];
		n--;
		MAKE_UP(1);
		a2 = s[1];
		sum += a1+a2;
		s[1] = sum;
		MAKE_UP(1);
	}
	printf("%lld",sum);
	return 0;
}

void BUILD_SMALLHEAP(long long h[])
{
	int t=n/2,i;
	for(i=t;i>=1;i--)
	{
		MAKE_UP(i);
	}
	return;
}
void MAKE_UP(int a)
{
	int i=a,num;
	long long t;
	while(i<=n/2)
	{
		if((2*i+1)<=n)
		{
			if(s[2*i]<s[2*i+1])
			num = 2*i;
			else
			num = 2*i+1;
		}
		else
		num = 2*i;
		
		if(s[i]>s[num])
		{
			t = s[num];
			s[num] = s[i];
			s[i] = t;
			i = num;
			continue;
		}
		else
		break;
	}
	return;
}





De了一下午还没发现错误,求教大佬!

2022/3/9 16:27
加载中...