首页 > 后端开发 > C++ > 正文

重新排列一个数组以最大化i*arr,使用C++

WBOY
发布: 2023-08-30 15:13:04
转载
819人浏览过

重新排列一个数组以最大化i*arr,使用c++

在本文中,我们将讨论重新排列给定的 n 个数字的数组的问题。基本上,我们必须从数组中选择元素。为了选择每个元素,我们得到一些点,这些点将通过当前元素的值*当前元素之前选择的元素数来评估。您应该选择元素以获得最高分。例如 -

Input : arr[ ] = { 3, 1, 5, 6, 3 }

If we select the elements in the way it is given, our points will be
   = 3 * 0 + 1 * 1 + 5 * 2 + 6 * 3 + 3 * 4
   = 41
To maximize the points we have to select the elements in order { 1, 3, 3, 5, 6 }
   = 1 * 0 + 3 * 1 + 3 * 2 + 5 * 3 + 6 * 4
   = 48(maximum)

Output : 48

Input : arr[ ] = { 2, 4, 7, 1, 8 }
Output : 63
登录后复制

寻找解决方案的方法

看这个例子,我们得到了得到最大点,我们需要从小到大选择元素。找到解决方案的方法是,

  • 按升序对给定数组进行排序。
  • 开始从索引 0 到末尾选取元素。
  • 计算选择每个元素所获得的分数。

示例

#include <bits/stdc++.h>
#include <iostream>
using namespace std;

int main () {
   int arr[] = { 2, 4, 7, 1, 8 };
   int n = sizeof (arr) / sizeof (arr[0]);
   // sorting the array
   sort (arr, arr + n);

   int points = 0;
   // traverse the array and calculate the points
   for (int i = 0; i < n; i++) {
      points += arr[i] * i;
   }
   cout << "Maximum points: " << points;
   return 0;
}
登录后复制

输出

Maximum points: 63
登录后复制

上述代码说明

这段C++代码很容易理解。首先我们对数组进行排序,然后使用 for 循环遍历数组并计算从头到尾选择每个元素所获得的分数。

降重鸟
降重鸟

要想效果好,就用降重鸟。AI改写智能降低AIGC率和重复率。

降重鸟 113
查看详情 降重鸟

结论

在本文中,我们讨论选择数组中的元素以获得最大点的问题,其中点由 i * arr[i] 计算。我们采用贪心方法来解决这个问题并获得最大分数。还讨论 C++ 代码来做同样的事情,我们可以用任何其他语言(如 C、java、Python 等)编写此代码。希望本文对您有所帮助。

立即学习C++免费学习笔记(深入)”;

以上就是重新排列一个数组以最大化i*arr,使用C++的详细内容,更多请关注php中文网其它相关文章!

相关标签:
c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:tutorialspoint网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号