1 条题解

  • 0
    @ 2025-4-14 18:41:37

    C++ :

    #include<iostream>
    using namespace std;
    
    int sum = 0;
    
    int main()
    {
    	int N;
    	cin >> N;
    	int *num = new int[N];
    	for(int i = 0; i < N; i++)
    	{
    		cin >> num[i];
    	}
    	int min = 0;
    	int min_d = 0;
    	int min_mid = 0;
    	int min_dmid = 0;
    	for(int count = N; count > 1; count--)
    	{
    		min_mid = 0;
    		min_dmid = 0;
    		for(int i = 0; i < N; i++)
    		{
    			if((num[i] != 0) && (num[i] < num[min]))
    			{
    				min = i;
    			} 
    		}
    		//令mid_d为不等于min的一个值,排除num[min]后求剩下的元素最小值 
    		for(int i = 0; i < N; i++)
    		{
    			if((num[i] != 0) && (i != min)) 
    			{
    				min_d = i;
    				break; 
    			}
    		}
    		for(int i = 0; i < N; i++)
    		{
    			if(i == min) continue;
    			else
    			{
    				if((num[i] != 0) && (num[i] < num[min_d]))
    				{
    					min_d = i;
    				}
    			}
    		} 
    		min_dmid = num[min_d];//因为相加后就得将改坐标删除,所以用两个中间变量记录两个最小值 
    		min_mid = num[min];
    		for(int i = 0; i < N; i++)
    		{
    			if((num[i] != 0) && (num[i] == min_dmid))
    			{
    				sum += min_dmid;
    				num[i] = 0;
    			}
    			if((num[i] != 0) && (num[i] == min_mid) && (min_mid != min_dmid))
    			{
    				sum += min_mid;
    				num[i] = 0;
    			}
    		}
    		num[min] = min_mid + min_dmid;
    	}
    	cout << sum << endl;
    	delete [] num;
    	return 0;
    }
    
    • 1

    【设计型】第11章:指针和数组 Huffuman树(2)

    信息

    ID
    3047
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者