c晨光


私信TA

用户名:H1320312

访问量:13118

签 名:

大佬们带带我,学渣+oo,哎,我好笨,我为什么这么笨

等  级
排  名 646
经  验 3906
参赛次数 0
文章发表 23
年  龄 10
在职情况 学生
学  校 HBWLXY
专  业 学生

  自我简介:

生活当然需要多姿多彩,不过哪有刷题精彩呢,哇咔咔

解题思路:

按照题目的要求解题,简单明了,易懂!

360截图17430811356850.png

这个就是我们的解题思路,就是不断的把最小的两个数找出来,然后加在一起,把这两个数存在一个数组中,同时把以前的两个最小的数用这个数替换掉,然后用递归的思路做,直到最后只剩下一个数为止。

运用到的东西

1》数组a

这里的数组a可以理解是动态数组,数组的长度是在减少的


因为我们总是把数组a中的最小的两个值加在一起,然后替换掉这两个值

把加在一起的值存到数组b里面去


2》数组b,存储数组a中的值,其实这里的数组b是可以不要的,要着主要是方便理解这个过程


3》累加的sum,这里的累加的使用其实就是求最后的权值,累加的值是数组b中的值


4》STL中的sort排序函数//个人比较懒,直接就用这个排序函数了

关于sort函数的使用在参考代码的下面有


注意事项:
注意数组的长度在改变,循环一次,长度减少一个,原因就是最小的两个数合在一起了,长度自然就减少了



个人理解

1》这个题目其实用队做是更好的

2》哈夫曼树的权值的计算我一直都是画成树再用路径来算的,这种想法是非常的狭隘的,如果这个题目构造成树再来解的话会非常的麻烦。

因而可见对一个知识的理解的深度是相当重要的,不然会很吃亏d(╯﹏╰)b 咕~~

参考代码:

 #include <iostream>
 #include <algorithm>
 bool complare(int a,int b)
{
return a>b;
}
 using namespace std;
 int main(int argc, char *argv[])
 {
 int length;
 cin>>length;
 int a[length];
 for(int i=0;i<length;i++)
 cin>>a[i];
 int n=length-1,b[n],sum=0;
 for(int j=0;j<n;j++)
 {
  sort(a,a+length,complare);
  b[j]=a[length-1]+a[length-2];
  sum+=b[j];
  length--;
  a[length-1]=b[j];
 }
 cout<<sum;
 return 0;
 }






C++sort()函数的用法
近来看了c++标准库这本书,学到了很多,就把这其中的一点C++sort()函数的用法写下来和大家分享吧!
(一)为什么要用c++标准库里的排序函数
Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高!
(二)c++标准库里的排序函数的使用方法
I)Sort函数包含在头文件为#include<algorithm>的c++标准库中,调用标准库里的排序方法可以不必知道其内部是如何实现的,只要出现我们想要的结果即可!II)Sort函数有三个参数:
(1)第一个是要排序的数组的起始地址。
(2)第二个是结束的地址(最后一位要排序的地址)
(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
Sort函数使用模板:
Sort(start,end,,排序方法)
下面就具体使用sort()函数结合对数组里的十个数进行排序做一个说明!
例一:sort函数没有第三个参数,实现的是从小到大#include<iostream>#include<algorithm>using

namespace std;int main()
{ 
int a[10]={9,6,3,8,5,2,7,4,1,0};
 for(int i=0;i<10;i++)
  cout<<a[i]<<endl;
sort(a,a+10);
 for(int i=0;i<10;i++) 
 cout<<a[i]<<endl; return 0;
}


例二
通过上面的例子,会产生疑问:要实现从大到小的排序肿么办?
这就如前文所说需要在sort()函数里的第三个参数里做文章了,告诉程序我要从大到小排序!
需要加入一个比较函数 complare(),此函数的实现过程是这样的

bool complare(int a,int b)
{
 return a>b;
 }


这就是告诉程序要实现从大到小的排序的方法!#include<iostream>#include<algorithm>using

namespace std;bool complare(int a,int b)
{ 
return a>b;
}
int main()
{ 
int a[10]={9,6,3,8,5,2,7,4,1,0};
 for(int i=0;i<10;i++)
  cout<<a[i]<<endl;
 sort(a,a+10,complare);//在这里就不需要对complare函数传入参数了,//这是规则
 for(int i=0;i<10;i++)
  cout<<a[i]<<endl;
   return 0;
}


例三:
通过上面例一、二的方法虽然实现了从大到小和从大到小的排序,这样做还是有点麻烦,因为还需要自己编写告诉程序进行何种排序的函数,c++标准库强大的功能完全可以解决这种麻烦。
Sortt函数的第三个参数可以用这样的语句告诉程序你所采用的排序原则
less<数据类型>()//从小到大排序greater<数据类型>()//从大到小排序结合本例子,这样的就可以完成你想要的任何一种排序原则了

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{ 
int a[10]={9,6,3,8,5,2,7,4,1,0};
 for(int i=0;i<10;i++)
  cout<<a[i]<<endl;
sort(a,a+10,less<int>());
 for(int i=0;i<10;i++)
  cout<<a[i]<<endl;
   return 0;
}


#include<iostream>
#include<algorithm>
using namespace std;
int main()
{ 
int a[10]={9,6,3,8,5,2,7,4,1,0}; 
for(int i=0;i<10;i++) 
 cout<<a[i]<<endl;
 sort(a,a+10,greater<int>());
  for(int i=0;i<10;i++)
   cout<<a[i]<<endl;
   return 0;
}





例四:利用sort函数还可以实现对字符的排序,排序方法大同小异,下面就把程序范例展示一下

#include<iostream>
#include<algorithm>
using namespace std;int main()
{ 
char a[11]="asdfghjklk"; 
for(int i=0;i<10;i++) 
cout<<a[i]<<endl;
 sort(a,a+10,greater<char>());
  for(int i=0;i<10;i++)
  cout<<a[i]<<endl;
   return 0;
}


 

0.0分

15 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区

#include<iostream>
#include<algorithm>
#include<cstdlib>
using namespace std;

int main(){
	int n;
	cin>>n;
	int * q = (int*)malloc(10000*sizeof(int));
	int front = 0,rear = 0;
	for(int i=0;i<n;i++){
		cin>>q[rear++];
	}
	sort(q,q+n);
	int sum = 0; 
	while(front!=rear-1){
		int temp = q[front++]+q[front];
		q[front] = temp;
		sum = sum + temp;
		sort(q,q+n);
	}
	printf("%d",sum);
}
我是个新手,写的不好别见怪哈,有什么建议大家尽管提
2020-05-14 16:50:54
妙啊
2020-02-25 13:10:26
受教了
2019-12-02 20:20:13
楼主英语...compare写错啦
2019-03-23 21:41:49
up
2019-01-18 22:43:37
  • «
  • 1
  • »