开发者
C语言常用算法——非数值计算常用经典算法1
C语言常用算法——非数值计算常用经典算法1
发表于2024/01/29
7851

1.穷举

也称为“枚举法”,即将可能出现的每一种情况一一测试,判断是否满足条件,一般采用循环来实现。

(1)用穷举法输出所有的水仙花数(即这样的三位正整数:其每位数位上的数字的立方和与该数相等,比如:13+53+33=153)。

[法一]

#include<stdio.h>

void main()

{

 int x,g,s,b;

 for(x=100;x<=999;x++)

  {

    g=x%10;  s=x/10%10;  b=x/100;

    if(b*b*b+s*s*s+g*g*g==x)

        printf("%d\n",x);

    }

}

【解析】此方法是将100到999所有的三位正整数一一考察,即将每一个三位正整数的个位数、十位数、百位数一一求出(各数位上的数字的提取算法见下面的“数字处理”),算出三者的立方和,一旦与原数相等就输出。共考虑了900个三位正整数。

[法二]

#include<stdio.h>

void main()

{

 int g,s,b;

 for(b=1;b<=9;b++)

  for(s=0;s<=9;s++)

   for(g=0;g<=9;g++)

    if(b*b*b+s*s*s+g*g*g==b*100+s*10+g)  

         printf("%d\n",b*100+s*10+g);

}

【解析】此方法是用1到9做百位数字、0到9做十位和个位数字,将组成的三位正整数与每一组的三个数的立方和进行比较,一旦相等就输出。共考虑了900个组合(外循环单独执行的次数为9,两个内循环单独执行的次数分别为10次,故if语句被执行的次数为9×10×10=900),即900个三位正整数。与法一判断的次数一样。

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞