琴海


私信TA

用户名:AiQinHai

访问量:6164

签 名:

他时若遂凌云志,敢笑黄巢不丈夫!

等  级
排  名 2043
经  验 2488
参赛次数 0
文章发表 7
年  龄 22
在职情况 学生
学  校 山东协和学院
专  业 计算机科学与技术

  自我简介:

解题思路:看注释

注意事项:看注释

参考代码:

#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分

6 人评分

  评论区

欢迎留言讨论
2023-09-07 14:18:09
  • «
  • 1
  • »