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

重新排列一个数组以最大化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   = 41To 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 : 48Input : arr[ ] = { 2, 4, 7, 1, 8 }Output : 63

登录后复制

寻找解决方案的方法

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

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

示例

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

输出

Maximum points: 63

登录后复制

上述代码说明

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

结论

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2584909.html

(0)
上一篇 2025年3月6日 14:55:23
下一篇 2025年3月2日 11:26:06

AD推荐 黄金广告位招租... 更多推荐

发表回复

登录后才能评论