解题思路:看注释

注意事项:看注释

参考代码:

#include
int main()
{
int n;//第一行
int i,j,k,t;//控制循环
int a[1005];//存放数据
scanf("%d",&n);
for(i=0;i<n;i++)//循环输入数据
scanf("%d",&a[i]);
//对数据进行排序
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}



/*输出排序后的数据
for(i=1;i<=n;i++)
printf("%d ",a[i]);
printf("\n\n");*/
int sum=0;//统计每轮循环后的费用
int sum2=0;//每次的费用相加

for(i=1;i<=n;i++)
{
//先对所剩下的数据进行排序
for(k=i;k<n;k++)
for(j=i;j<n;j++)
if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}


/* 输出排序后的数据
for(k=i;k<=n;k++)
printf("%d ",a[k]);
printf("\n");*/

if(i==1)sum=0;//第一次的话,sum初始值为0
else sum=a[i];//第二次以上,sum=当前剩下的数的最小值


a[i+1]+=a[i];//后一位=当前位+后一位

if(i==1)sum+=a[i+1];//第一次的话,sum(每轮循环的费用)=sum+后一位
else if(i==n)sum+=a[i];//最后一次的话,sum(每轮循环的费用)=sum+当前位
else {sum+=a[i+1];sum-=a[i];}//中间次数的话,sum=sum+后一位,因为后一位已经加上了当前位,所以需要减去

if(i<n)sum2+=sum;//每次的费用累加
}
printf("%d",sum2);

return 0;
}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

琴海 1年前 回复TA
欢迎留言讨论