问题: 寻找3000以内的亲密数?
亲密数就是: 【A数的因子和】=【数B】 ,而【B数的因子和】=【数A】。 那么A和B就是亲密数。
算法思路:
(1)遍历3000范围内的每个数
(2)求得【A的因子和】,保存到【数B】
(3)求的【B的因子和】,保存到【数N】
(4)比较是否 【数N】(B的因子和)等于【数A】
代码如下:
<pre name="code" class="cpp">#include <stdio.h>
void main()
{
int numA,numB,numN,i;
printf("显示3000以内的亲密数:\n");
//循环穷举3000以内整数
for(numA = 1; numA<3000; numA++)
{
//计算numA的各个因子,同样循环
for(numB = 0, i = 1; i<=numA/2; i++)
{
if(!(numA%i))
numB+= i;
}
//计算numB的各个因子,同样循环
for(numN = 0, i = 1; i<=numB/2; i++)
{
if(!(numB%i))
numN+= i;
}
if(numN==numA&&numA<numB)
printf("%4d--%4d ",numA,numB);
}
}
问题扩展:
对于numB=0 和 numN=0 的赋值都是在循环中完成的,这样可以保证每一次的外循环都能使numB和numN赋值为0,最后累加得到因子和。
如果赋值语句在循环外面,结果就会发生错误。
注意:对于这类多次将某些值存储在一个变量中时,一定要注意变量的赋初值的位置。