总分数最大

每日一练社区 2021-08-11 11:50:09

每位同学都有自己的一个幸运数,乐乐所在班级共有n位同学,因此有编号为1至n的n块标牌,标牌的编号与自己的幸运数相乘,就是这位同学的分数。你的工作就是帮乐乐寻找一种方案,使得班级总分数最大。 输入
第一行只有一个整数n
第二行共有n个不超过10000的正整数,中间有一个空格隔开。
输出
只有一行且只有一个整数,乐乐班级的总分数。

以下程序实现了这一功能,请你填补空白处内容:

#include<stdio.h>
int main()
{
	int a[10005];
	long long t=0;
	int n,i,j,x;
	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++){
			_____________;
		}
	}
	for(i=0;i<n;i++)
	{
		t+=a[i]*(i+1);
	}
	printf("%lld",t);
	return 0;
}
...全文
679 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1
对于a[j]中的j=0是否可以优化一下算法变为j=i,但是突然意识到j=0好像不对,于是用dev软件测试了一下 (3,1,2,3)结果是10,把j=0改为j=i,对于(3,1,2,3)结果是14。明显j=i才是正确的,问题就是j=0得话,循环运算会把上一步a[i]的最小值再次参加运算,造成排序错误。
  • 打赏
  • 举报
回复 1
刚开始看这题被最大误导了,看题干要最大数,程序结尾总数计算是乘法,以为是让a[i]最大(就好像1+2+3+...+n一样,得中值或最大值然后乘法n或n/2)这样,就想着让a[i]与a[j]比较换值,取最大。后边做错了,仔细分析了一下发现程序结尾计算是a[i](既题干的幸运数)最小乘法i+1(既序号),然后慢慢加上去,既数越大所占权重越大的分配方法,也就是说要让a[i]的值是最小的排序方法。
  • 举报
回复 1
@孤烟染秋 说的有点不太严谨,做一下补充,上述中值为(1+n)/2,最大值指1+n
沉迷书籍海洋 2023-10-10
  • 打赏
  • 举报
回复
我感觉就是让大的和大的去相乘,得到的总分数最大
huabaoACY 2023-07-19
  • 打赏
  • 举报
回复
看最下面那个总分计算,可得此处将数组从小到大排序
域中四大 2023-02-01
  • 打赏
  • 举报
回复

有些懵逼, 答案是
if(a[i]>a[j]){
x=a[i];
a[i]=a[j];
a[j]=x;
}
但这不是从小到大排序吗? 为了防止是我演算出错,特意将代码复制下来运行了一遍

这不是将

新新C 2023-01-08
  • 打赏
  • 举报
回复

我觉得是这样


    for(int i = 0 ; i < n - 1; i++)
    {
        for(int j = 0 ; j < n - i - 1; j++)
        {
            if(a[j] > a[j+1])
            {
                x = a[j];
                a[j] = a[j+1];
                a[j+1] = x; 
            } 
        }
    }
人间@烟火 2022-11-26
  • 打赏
  • 举报
回复 4
因为是使全班每个人标牌号和幸运数相乘的总和最大,运用贪心思想,想要使得总体最大,就应该使每个人的乘积尽量大,乘法的运算中有一种性质,相乘的两个数的差越小,乘积就会越小,而标牌号的顺序是有序,并是从1到n递增上去的,所以我们只需要把所有的幸运数也从小到大排序,就可以使得标牌数和相应的幸运数的差最小化,最后就可以使得个人的乘积最大,从而使得班级的总分最大了,故此空应该是从小到大的冒泡排序。
kingdxd 2022-10-12
  • 打赏
  • 举报
回复
先排序然后求一阶矩即可
  • 打赏
  • 举报
回复

if(a[i]<a[j]){
x=a[i];
a[i]=a[j];
a[j]=x;
}

人间@烟火 2022-11-26
  • 举报
回复
@不知道起啥名字好。 刚学c语言时这叫交换三步曲。。。😁
指针从不野 2022-01-11
  • 打赏
  • 举报
回复 4
满足总分数最大,条件是小标牌乘以小幸运数,大标牌乘以大幸运数,只需要将标牌和幸运数按降序乘积求和即可。通过双层循环和一个外部变量实现冒泡排序。
去留意 2021-09-16
  • 打赏
  • 举报
回复 5
for循环输了数据 然后排序,从小到大。 最后依次乘以从小到大的编号

11,501

社区成员

发帖
与我相关
我的任务
社区描述
Study well and make progress every day
其他 企业社区
社区管理员
  • 每日一练社区
  • CSDN学习
  • 幻灰龙
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧