虽然我的代码有效,但这不是问题想要解决的方式,我想知道正确的方法。
问题是:
给定一个排序的整数列表,输出中间的整数。假设 整数的个数总是奇数。
例如:如果输入为 2 3 4 8 11 -1(负数表示结束),则 输出是:
4 任何测试用例的最大输入数量不应超过 9 积极的价值观。如果超过,则输出“Too much input”。
提示:使用大小为9的数组。首先,将数据读入数组。然后, 根据项目数量,找到中间的项目。
我的代码:
integer userInput
integer i
integer mid
integer array(20) number
userInput = 1
for i = 0; userInput >= 0; i = i + 1
if number[i] > -1
userInput = Get next input
number[i] = userInput
i = i - 1
mid = i / 2
if i > 9
Put "Too many inputs" to output
elseif i % 2 == 0
Put number[mid - 1] to output
else
Put number[mid] to output
问题指出数组的大小必须配置为 9,但是使用 9 或 10 时,程序会失败,我不知道为什么,所以我出于沮丧将其设置为 20。我已经尝试过多种其他方法来解决这个问题,例如使用 while 循环
while number[i] > -1
但由于某种原因导致它永远不会结束,即使每组输入确实都有一个
-1
。还有其他方法我忘记了,但结果是输出 -1000000000
而不是任何实际数字。我很茫然,但至少我在某种程度上让它发挥了作用。
我向老师寻求帮助,他只说:“你的困难与你设置和使用阵列的“逻辑”有关。尝试从头开始”
我已经从头开始了大约十几次,但我没有明白他在说什么。有什么方法可以在 Coral 中设置我不知道的数组吗?
程序失败,因为他们要求您将数组设置为 9。 然而,他们偷偷地输入了应该停止程序的负数作为第 10 个输入,这将超出 9 的数组范围。
所以最好的办法是将数组设置为下一个最高的奇数整数:11
只需更改这一行:
integer array(20) number
至 integer array(11) number
万一其他人遇到这个问题,我自己也因为这个特定问题过于复杂而受到摆布。 这是通过了所有 10 项测试的 Coral 程序
提交通过了所有测试 总分:10 / 10
integer userInts
integer i
integer mid
integer array(9) n
userInts = Get next input
while (userInts >=0) and (i < n.size)
n[i] = userInts
userInts = Get next input
i = i + 1
if userInts >=0
Put "Too many inputs" to output
else
mid = i / 2
Put n[mid] to output
这在其他语言中更容易完成。但这个解决方案应该有效。
integer int
integer array(12) userNum
integer array(?) myArray
integer i
integer middleNum
integer counter
integer x
integer userInput
for i = 0; i < userNum.size; i = i + 1
userNum[i] = -1
userNum[0] = Get next input
for i = 0;userNum[i] >= 0; i = i + 1
userInput = Get next input
userNum[i + 1] = userInput
counter = counter + 1
if counter > 9
Put "Too many inputs" to output
else
myArray.size = counter
for i = 0; i < myArray.size; i = i + 1
myArray[i] = userNum[i]
int = myArray.size % 2
if int == 1
middleNum = myArray.size / 2
Put myArray[middleNum] to output