import java.util.Arrays;
import java.util.Scanner;
public class Huffman {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in
);
System.out.println("请输入:");
int n=scanner.nextInt(); //n个箱子
int k=scanner.nextInt(); //k个箱子连一起
int[] data=new int[n];
for(int i=0;i
data[i]=scanner.nextInt();
}
Arrays.sort(data);
int sum=0;
//创建一个二维数组存储结果
int date=n%k==0?n/k:n/k+1;
int[][] temp=new int[date][k];
int i=0;
int j=0;
while(date>0) {
date--;
for(i=0;i
if(data[i]>0) {
temp[date][j]=data[i];
sum=sum+data[i];
data[i]=0; //已经加过的值清0,避免重复计算
j++;
}
}
//代表一次加成功了
if(j>=k){
data[i-k]=sum;
}
//Arrays.sort(data);
sum=0;
j=0;
}
date=n%k==0?n/k:n/k+1;
for(i=0;i<date;i++) {
for(j=0;j<k;j++) {
sum=sum+temp[i][j];
}
}
System.out.println(sum);
}
}
Java代码
#include
#include
using namespace std;
void main(){
cout<<"请输入:"<
int n;
int k;
cin>>n;
cin>>k;
int *data=new int[n];
int temp=0;
for(int i=0;i
cin>>temp;
data[i]=temp;
}
sort(data,data+n);
int sum=0;
int date=n%k==0?n/k:n/k+1;
int *temp[date][k];
int i=0;
int j=0;
while(date>0){
date--;
for(i=0;i
if(data[i]>0){
temp[date][j]=data[i];
sum=sum+data[i];
data[i]=0;
j++;
}
}
if(j>=k){
data[i-k]=sum;
}
sum=0;
j=0;
}
date=n%k==0?n/k:n/k+1;
for(int t=0;t<date;t++){
for(int m=0;m<k;m++){
sum=sum+temp[t][m];
}
}
cout<<sum<<endl;
}
C++代码