文章

67

粉丝

207

获赞

29

访问

40.0k

头像
合并果子 题解:新手易错
P1544 中南大学机试题
发布于2024年2月17日 10:45
阅读数 773

#include <iostream>
#include <string.h>
using namespace std;
int main(){
	int n;
	cin >>n;
	long long int a[10005],b[10005],min=0,minn=0,sum=0;
	int mini=0,minni=0,cc;
	for(int i=0;i<10005;i++){
		a[i]=0;
	   b[i]=0;
	}
	for(int i=0;i<n;i++)
		cin >> a[i];
	// 循环n-1次,有n-1次的合并过程
	for(int ii=0;ii<n-1;ii++){
		//最后一次直接合并即可
		if(ii==n-2){
           sum=sum+a[0]+a[1];
		}
	else{min=9999999999999;
	minn=99999999999999;
	minni=0;
	mini=0;
	 // 2 5 11 23
	for(int i=0;i<n-ii;i++){

		if(a[i]<min){
			mini=i;
			min=a[i];
		}
		if(i==n-1-ii){//最后一次循环
	  sum=sum+min;
		}
	}	
for(int i=0;i<n-ii;i++){
		if(a[i]<minn&&i!=mini){
			minni=i;
			minn=a[i];
		}
		if(i==n-1-ii){//最后一次循环
			sum=sum+minn;
			}
	}

cc=0;
for(int i=0;i<n-ii;i++){
	if(i==mini||i==minni)
		continue;
	b[cc++]=a[i];//把旧堆放到b数组
}
b[cc]=minn+min;//把新堆放到b数组
for(int i=0;i<n-ii;i++)
	a[i]=0;//初始化a数组
for(int i=0;i<=...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发