蓝桥杯基础练习超全习题题解VIP版——BASIC-28.Huffuman树

每日刷题(五十一)

BASIC-28、Huffuman树

在这里插入图片描述
在这里插入图片描述
这个题还是蛮简单的,我这有点dp思维,就是定义两个数组,数组a存放输入的数据,数组cost用来记录每一次的费用,先把cost数组全都初始化为0。再做一个排序函数,先输入全部数据,然后排一次序,把前两个小的数之和放到数组cost里面。这个操作循环直到进行了n - 1次,然后最后再来个while循环,累加费用和。

详细C代码如下:

#include<stdio.h>
#include<string.h>

void sort(int a[], int n)
{
	int i, j, t;
	for(i = 0; i < n - 1; i++)
	{
		for(j = i + 1; j < n; j++)
		{
			if(a[i] > a[j])
			{
				t = a[i];
				a[i] = a[j];
				a[j] = t;
			}
		}
	}
}

int main()
{
	int n;
	scanf("%d", &n);
	int a[n];
	int i;
	int cost[n];
	memset(cost, 0, sizeof(cost));
	for(i = 0; i < n; i++)
		scanf("%d", &a[i]);
	sort(a, n);
	int j;
	for(i = 0; i < n - 1; i++)
	{
		cost[i] = a[0] + a[1];
		for(j = 0; j < n - 1 - i; j++)
		{
			if(j == 0)
				a[j] = cost[i];
			else
				a[j] = a[j + 1];
		}
		sort(a, n - 1 - i);
	}
	i = 0;
	int sum = 0;
	while(cost[i] != 0)
	{
		sum += cost[i];
		i++;
	}
	printf("%d\n", sum);
	return 0;
}

样例运行结果如下:
在这里插入图片描述

如果喜欢我的文章,请记得三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持,下期更精彩!!!

发布了99 篇原创文章 · 获赞 16 · 访问量 5905

猜你喜欢

转载自blog.csdn.net/qq_44631615/article/details/105208811