我的算法有什么问题?
What's wrong with my algorithm?
我正在解决一些在线数学测试,认为很难找到解决方案并将其放入devc++上的程序中,我应该153,370,371,407,
但缺少一个solution 407.
问题是:数字153
有一个有趣的性质。换句话说,它等于其数字的立方体之和:
13 + 53 + 33 = 153
370是具有相同性质的另一个数字。另外两个三位数的自然数有三个不同的数字,都小于500,具有相同的性质。找到他们。这是我的程序
#include<iostream.h>
#include<math.h>
using namespace std;
int main() {
int i,nr,a,b,c;
for(i=100;i<=500;i++) {
nr=i;
c=i%10;
b=i/10%10;
a=i/10/10;
if((pow(a,3)+pow(b,3)+pow(c,3))==nr) cout<<nr<<endl;
}
system("pause");
}
可能pow
返回double
导致浮点不准确。
相反,尝试
if(a*a*a + b*b*b + c*c*c == nr)
cout ....
浮点计算并不总是精确的,比较浮点值是否相等通常是不明智的。
切中要害,更换
if((pow(a,3)+pow(b,3)+pow(c,3))==nr)
带有
if((a*a*a + b*b*b + c*c*c) == nr)
当我运行该程序时,我得到了这4个答案。
pow
从来没有被认为是不精确的,足以在这个琐碎的测试中进行任何舍入。
但在SO的问题中,似乎有一种倾向,即将c头拉到c++中并使用system("pause");
,即使用的pow
版本严重低于应有的准确性。因此,前两个答案(建议不要使用pow
)可能是有效正确的。但这只是因为你的数学库出了问题,而不是因为pow
的有效副本会变得那么糟糕。
因此,你可以找到一个更好的C++环境或更好的数学头,或者你可以围绕pow
副本中的缺陷开始一些严重的防御性编程
但如果这还不能解决问题,接下来要怀疑的是endl
在pause
之前工作不太正常。也许您看到了一些输出缓冲问题。无论如何,我确信代码是好的(甚至它使用了pow
),问题出在数学或I/O库函数中。
相关文章:
- 警告处理为错误这里有什么问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
- 违反const正确性:我应该现实地期待什么问题
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- 我的逻辑反转字符串中的元音有什么问题?
- 需要以下代码的帮助,下面的代码有什么问题
- 常量公共成员有什么问题?
- c++无值sort()的问题是什么?
- 以下代码中的函数模板有什么问题?
- 这个返回元素位置的基于循环的函数有什么问题?
- creat_list2功能有什么问题?
- 基本的 c++ 问题:如果我在函数中创建某些内容并返回它会发生什么?
- 我遇到了黑客排名中的问题"TWO STRINGS"的三个测试用例的分段错误。原因是什么?
- 什么是钻石问题?是一系列问题还是特定问题?
- 格式说明符C++有什么问题
- 我应该在 main 函数中写什么来测试我的问题?
- 任何人都可以告诉我我的 C++ 代码出了什么问题?
- 方法问题 - 什么会改变值,什么不会改变?什么是无效的?