回答
嘛看起来你需要循环,直到N/2是是n的1/2。划分数字,如果没有剩余,那么你可以将它包括在总数中,一旦你用尽了n的1/2,那么你检查你的总和=你测试的数字。
例如:
#include "stdafx.h"
#include "iostream"
#include "math.h"
using namespace std;
int main(void)
{
int total=0;
for(int i = 1; i<=100; i++)
{
for(int j=1; j<=i/2; j++)
{
if (!(i%j))
{
total+=j;
}
}
if (i==total)
{
cout << i << " is perfect";
}
//it works
total=0;
}
return 0;
}
顺便说一下,它可以被优化的人我知道,但它的工作在可读代码:) – JonH 2009-10-12 15:55:17
顺便说一句,这是用C++完成的,你可以在C#中完成, VB.net或任何其他语言j请遵循它背后的逻辑。第一次循环直到包括100,因为你说你正在寻找任何完美的数字,直到100.然后第二个循环被用作除数,并达到直到i/2是你的n的1/2。如果没有余数!(i%j),这意味着它平均分配,你可以把它包括在你的总和中。否则保持循环。一旦你退出循环,即j = i/2,那么你只需检查你的累计总数是否是你原来的n(i)。如果他们相等,那就是一个完美的数字! – JonH 2009-10-12 15:57:35
所以我怀疑弗兰克寻找Prolog的回答,是的它的气味,而homeworky ...
为了好玩,我决定写我的答案。我花了大约50行。
所以这里是我的谓词看起来像什么大纲。也许它会帮助你思考Prolog的方式。
is_divisor(+Num,+Factor)
divisors(+Num,-Factors)
divisors(+Num,+N,-Factors)
sum(+List,-Total)
sum(+List,+Sofar,-Total)
is_perfect(+N)
perfect(+N,-List)
+和 - 实际上并不是参数名称的一部分。它们是关于作者期望实例化的文档线索。 (注意)“+ Foo”表示您希望Foo在谓词被调用时拥有一个值。 “-Foo”表示你希望Foo在谓词被调用时变成一个变量,并在它完成时给它一个值。 (有点像输入和输出,如果它有助于这种想法)
每当你看到一对谓词像sum/2和sum/3,赔率是总和/ 2一个就像一个总和的包装/ 3这是一个像accumulator一样的东西。
我没打算让它打印出来很好。你可以直接查询它在Prolog的命令行:
?- perfect(100,L).
L = [28, 6] ;
fail.
可能会有所帮助,我发现与Prolog的谓词的另一件事是,一般有两种。一个是简单地检查是否有事。对于这种谓词,你希望一切都失败。这些不需要递归。
其他人会想通过一个范围(数字或列表)并始终返回结果,即使它是0或[]。对于这些类型的谓词,您需要使用递归并考虑您的基本情况。
HTH。
注:这就是所谓的“模式”,实际上,你可以指定他们和编译器/解释器将执行它们,但我个人只是用他们的文档。还试图找到一个关于Prolog模式的信息页面,但我找不到一个好的链接。 :(
- 1. 1到100之间的数字之和
- 2. 我想找到0到1000之间的完美数字,而不是跑步
- 3. 用C程序找到完美数字
- 4. 找到一个奇数的完美数
- 5. 查找范围在1到100之间的因子数最多的数
- 6. 查找1到100之间有多少个8?
- 7. 用C语言编写的1到100之间的素数
- 8. 在1-500之间找到强大的数字?
- 9. 对于数字1到100的Java REGEX
- 10. 包含1和100之间的偶数
- 11. 如何在1到100的整数数组中找到缺失的数字?
- 12. 如何给用户输入1到100之间的数字使用jquery或javascript
- 13. 在sqlite中选择一个范围(1到100)之间的数字
- 14. 找到1到2^128之间的素数
- 15. 找到两个数字之间的点
- 16. 如何在C中找到完美的数字10^18?
- 17. 找到100之间的所有勾股数为1000
- 18. 打印数字1到100在10列
- 19. 打印数字1到100,每行
- 20. 找到完美的正方形
- 21. 两个数字之间的完美力量
- 22. 之间找到{}
- 23. 允许0到100之间的数字python
- 24. 如何提示用户输入0到100之间的数字?
- 25. 高效找到完美广场
- 26. 试图找到没有sqrt函数0和1之间的sqrt数字
- 27. 得到0之间的轮数为1
- 28. 显示1到100之间的所有7的倍数的程序C++
- 29. 在文本视图上生成1到100之间的随机数的按钮
- 30. 找到100的范围和他们的计数之间的数值
“无”(序言笑话) – 2009-10-12 16:44:06