不放题目了·,大概思路就是在n个数中找出前k个大的,记录·这k个在数组中的位置
然后将数组化成k组,答案不唯一每组含一个最大的
我的划分方法是k0+1、k1-k0\k2-k1\n-1-kn
ac代码
#include <stdio.h>
int main()
{
int n,k;
scanf("%d %d",&n,&k);
int number[n];
int i,j;
for(i=0;i<n;i++)
{
scanf("%d",&number[i]);
}
int ne[k];
int wei[k];
// if(k==1)
// printf()
int out=0;
int a,we;
for(i=0;i<k;i++)
{
a=number[0];
wei[i]=0;
for(j=1;j<n;j++)
{
if(number[j]>a)
{
a=number[j];
wei[i]=j;
}
}
ne[i]=a;
number[wei[i]]=0;
} //现在得到 了k个最大值和这k个最大值所在的位置
// for(i=0;i<k;i++)
// printf("%d\t%d\t",wei[i],ne[i]);
for(i=0;i<k;i++)
{
out+=ne[i];
}
printf("%d\n",out);
for(i=0;i<k-1;i++)
{
for(j=0;j<k-1;j++)
{
if(wei[j+1]<wei[j])
{
we=wei[j+1];
wei[j+1]=wei[j];
wei[j]=we;
}
}
}//对排位进行冒泡排序
// for(i=0;i<k;i++)
// printf("%d\t%d\t",wei[i],ne[i]);
if(k==1)
printf("%d\n",n);
if(k==2)
printf("%d %d\n",wei[0]+1,n-1-wei[0]);
if(k>2)
{
printf("%d ",wei[0]+1);
for(i=1;i<k-1;i++)
{
printf("%d ",wei[i]-wei[i-1]);
}
printf("%d\n",n-1-wei[k-2]);
}
}