生成一维整数数组,数组长度为 10,范围从 1 到 20
Posted
技术标签:
【中文标题】生成一维整数数组,数组长度为 10,范围从 1 到 20【英文标题】:Generate one dimensional array of integers with array length of 10, ranging from 1 to 20 【发布时间】:2020-12-07 14:46:00 【问题描述】:我正在努力帮助我的兄弟完成他的算法作业,只是我对 C# 不熟悉,而且我也对这个问题感到困惑。
基本上该指令是生成一个长度为 10 的整数的一维数组,范围从 1 到 20。然后打印整数的最大和,当你将数组除以 2 时,左边的整数和小于右边的整数之和。
示例结果:
生成的整数数组:1,5,10,3,5,20,6,8,2,14
左侧最大值 = 24 (1+5+10+3+5=24)
右侧最大值 = 50 (20+6+8+2+14=50)
生成数组很容易,令人困惑的部分是数组的前半部分的总和必须小于后半部分。任何帮助都会非常感激!
【问题讨论】:
从左到右逐步移动拆分索引,同时跟踪两边的总和。所以最初,分割索引左= 6,右 = 68,依此类推。继续此操作直到 left >= right 并且您知道您刚刚通过了正确的分割点。 虽然我可以尝试研究和理解这一点,但示例代码将不胜感激 【参考方案1】:我认为一个好主意是在生成过程中检查数组左右部分的总和。如果在某个时刻左总和大于您可以添加到下一个右总和之间的差值。
Random random = new Random();
int[] array = new int[10];
int sumleft = 0;
int sumright = 0;
int number;
for (int i = 0; i < array.Length / 2; i++)
number = random.Next(1, 21);
array[i] = number;
sumleft += array[i];
number = random.Next(1, 21);
sumright += number;
if (sumleft >= sumright)
number += sumleft - sumright + 1;
sumright += sumleft - sumright + 1;
array[i + 5] = number;
我检查了几次结果,数组的右侧总是大于左侧,并且数字在指示的范围内。
【讨论】:
以上是关于生成一维整数数组,数组长度为 10,范围从 1 到 20的主要内容,如果未能解决你的问题,请参考以下文章
有一个整数数组,数组长度为10万,整数的范围位于3到900之间,请用Java实现时间复杂度尽可能低的排序算法(假设内存空间足够大)