2是质数,所以示例解应该是(2+3+5)/3 = 3.33....
+1,例子是错误的:(
*脸红*哦!至少我们得到了实际的测试套件。谢谢你的提示。固定它。
我不明白有什么问题
好一个…
我不明白为什么这对测试3不起作用:out=sum(in.*isprime(in))/sum(isprime(in))
它适用于所有其他测试,但测试3要求答案为3,代码给出的答案为3.0000。有人能告诉我为什么吗?
有趣的:)
好
好一个
这个题目很难理解。
初学者的好问题。
出什么问题了
A = find(isprime(in))
Out = mean(in(a)) ?
它在我自己的MATLAB环境中工作得很好
第三次,我在我的电脑上得到的结果是3.0000,但它失败了,我现在很困惑。
' = isprime(的);
=(。* ')和/总和(');
这是因为MATLAB只处理浮点运算,而不是精确(十进制)运算。
你可以用MATLAB在你的计算机上做一个快速检查- sprintf('%0.18f\n', out),在计算出来之后,你会看到值不完全是3。
tf = isprime(的);
数= nnz (tf);
合计=总和(sum (tf。*));
=合计/计数;
为什么这个代码不工作
为什么会这样,
3.
失败
X = [3 3;3 3];
y_correct = 3;
断言(isequal (meanOfPrimes (x) y_correct))
出= 3.0000
断言失败。
为什么?
非常容易
奇怪的弯曲,不过还好
gj
作弊
我在测试3中也有问题,但这段代码如果通过了所有测试:
function out = meanOfPrimes(in) mean = sum(in.*isprime(in))/sum(isprime(in));=圆(意思是,1);结束
在= [3 3;3 3]
在=
3 3
3 3
> >总和(。* isprime()) /笔(isprime ())
ans =
3.0000
问题出在两个方面:
(1)测试3的分子和分母将是向量,而不是标量,因为这是sum()的工作方式;
(2)采用MATLAB算法进行矩阵除法,引入了截断误差。您的代码对测试3产生了一个据说是3 - (4.4409E-16)的答案。当然,如果只显示几个小数点,则显示为“3.0000”。
为了避免这个问题,将输入矩阵重塑为向量。这可以通过重塑命令来完成,但更简单的方法是简单地将索引设置为“in(:)”。
这可以在https://au.mathworks.com/matlabcentral/cody/problems/14-find-the-numeric-mean-of-the-prime-numbers-in-a-matrix/solutions/11金宝搏官方网站42672中完成
另一种有效(但不那么优雅)的避免问题的方法是嵌套求和:)).(但您必须使用至少与矩阵的维数相同的“sum”命令。)
对于调试,请尝试使用whos命令。
@David Verrelli
谢谢!它的工作原理。
令人惊讶的是,你的溶液大小只有10。我假设它只包含一行代码。
你介意合用吗?
谢谢你!
为什么第三次测试失败了?它在Matlab中工作。
*慢拍*
先生,你是一个c程序员……
我试过用这种方法,很成功。但. .:(
这应该可以工作,但是它在第三次测试中失败了,因为由于舍入错误,它生成了一个ans的值为4.409e-16 out。