Python ';漂亮的阵列';CodeChef,如何输入数据
以下是问题陈述: 数组a被称为美丽的如果对于每一对数字ai,aj,(i ≠ j) ,存在一个ak,使得ak=ai*aj。注意,k可以是 也等于i或j 看看给定的数组a是否漂亮 输入 输入的第一行包含一个整数T,表示 测试用例。T测试用例如下 每个测试用例的第一行包含一个整数n,表示 a中的元素 下一行包含n个表示数组a的空格分隔整数。 输出 对于每个测试用例,输出包含“是”或“否”的单行 (不加引号)对应于问题的答案。 约束条件Python ';漂亮的阵列';CodeChef,如何输入数据,python,arrays,input,Python,Arrays,Input,以下是问题陈述: 数组a被称为美丽的如果对于每一对数字ai,aj,(i ≠ j) ,存在一个ak,使得ak=ai*aj。注意,k可以是 也等于i或j 看看给定的数组a是否漂亮 输入 输入的第一行包含一个整数T,表示 测试用例。T测试用例如下 每个测试用例的第一行包含一个整数n,表示 a中的元素 下一行包含n个表示数组a的空格分隔整数。 输出 对于每个测试用例,输出包含“是”或“否”的单行 (不加引号)对应于问题的答案。 约束条件 1 ≤ T ≤ 106 1 ≤ n ≤ 105 Sum of n
1 ≤ T ≤ 106
1 ≤ n ≤ 105
Sum of n over all the test cases ≤ 106
-109 ≤ ai ≤ 109
范例
输入
三,
二,
01
二,
1 2
二,
5.6
输出:
对
对
没有
我是CodeChef新手,不知道如何正确接收输入,我有一些代码试图用来解决漂亮的数组问题,但当我运行它时,我得到了一个NZEC
from collections import Counter
numCase = int(input())
for i in range(numCase):
length = input()
array = Counter(input().split(''))
answer = "no"
for i in range(length - 1):
if array[i] == 0 or array[i] == 1:
answer = "yes"
print(answer)
当我更改输入并手动输入一些数据时,代码对我起作用,有人能告诉我为什么这个代码不起作用吗?谢谢我想你没有检查数组的最后一个元素,因为范围有限。试试这个
for i in range(length)
首先,当您手动运行代码时,它会崩溃。您至少需要将length=input()
更改为length=int(input())
。NZEC是一个运行时错误,它是CodeChef,告诉您代码正在崩溃
其次,最好不要参考外部站点。给你潜在的回答者一个战斗的机会,给我们这个问题。查找CodeChef、它是什么以及在哪里可以找到问题声明都不方便。此外,CodeChef可能会消失,或者可能会关闭,然后您显然无法得到答案。话虽如此,我在你的问题中提出了问题陈述
最后,您的解决方案在逻辑方面存在根本性缺陷(不仅仅是崩溃)。仅检查数组中的前两项是否分别为0
和1
,是不够的。不过,你已经接近找到一个有效的解决方案了。观察以下输入/输出:
1
3
1 -4 -1
# Output should be "no", since -4 * -1 == 4, and 4 is not in the list.
此外,考虑
1
5
0 1 2 3 4 5
# Output should be "no" since 2 * 3 == 6, but 6 is not in the list
基本情况(如果数组len==1)是“是”输出。这在我看来是不正确的(我不能等于j,对于长度为1的输入,对没有很好的定义,我可以继续…)。所以我愿意给你们这部分解决方案,因为它也愚弄了我,而且还不是特别清楚
作为旁注,我似乎在这个线程中看到了一些对问题的误解,所以我将尝试添加一些澄清
数组a被称为美丽的如果对于每一对数字ai,aj,(i
≠ j) ,存在一个ak,使得ak=ai*aj。注意,k可以是
也等于i或j
这里的重要词语是“对于每一对数字ai,aj存在ak”,而不仅仅是某一对。这意味着如果我们有输入数组[2,3,6]
,答案是“否”,因为3*6==18,但18不在数组中。很容易认为答案应该是“是”,因为2*3==6,但这只是满足关系的一对。这个问题清楚地表明,每一对都必须满足这个关系
这是我的解决办法。我很想不发布它,但如果你真的被卡住了,这可以作为你的参考。我强烈建议你不要马上考虑解决方案,至少给自己一整天的时间来解决它,并且一定要考虑它。通过将我的解决方案复制/粘贴到CodeChef中,您不会学到任何东西。将鼠标悬停在下面的部分以查看我的解决方案
numCase=int(输入())
对于范围内的i(numCase):
长度=int(输入())
数组=[int(x)表示输入()中的x。拆分(“”)]
num_neg_ones=len([x表示数组中的x,如果x=-1])
num_ones=len([x=1时x代表数组中的x])
num_other=len([x表示数组中的x,如果x不在[0,-1,1]]))
回答=“是”
如果num_other>1:
回答=“否”
如果num_other==1且num_neg_ones>0:
回答=“否”
如果num_neg_ones>1且num_ones==0:
回答=“否”
打印(答案)
在这之后,我仍然会遇到同样的错误,虽然这是我的代码中的一个错误NZEC错误似乎意味着非零退出代码,但我不确定这意味着什么我是我的代码。你可以给我你尝试的问题的链接,因为可能我误解了你的问题和逻辑。但是对于这个问题,我猜你的逻辑是不完整的。想想数组{2,3,6}它有一对(ai和aj)结果是ak(6),但是根据你的逻辑,它会结果为假,但它是真的。是吗?是的,我理解,但这只是一种测试,以确定如何从站点获取输入,除非代码中使用了额外的测试数据,否则我仍然不确定为什么它不起作用,但我会尝试一个更完整的解决方案。@MohammadNadeem如果你有数组a={2,3,6},那么解决方案应该是“否”。根据问题陈述,所有对都必须存在[k]。例如,a[1]*a[2]==18(即,3*6==18),但18不在a中。 numCase = int(input()) for i in range(numCase): length = int(input()) array = [int(x) for x in input().split(' ')] num_neg_ones = len([x for x in array if x == -1]) num_ones = len([x for x in array if x == 1]) num_other = len([x for x in array if x not in [0, -1, 1]]) answer = "yes" if num_other > 1: answer = "no" if num_other == 1 and num_neg_ones > 0: answer = "no" if num_neg_ones > 1 and num_ones == 0: answer = "no" print(answer)