• 《算法竞赛入门经典》(第二版) 习题21 水仙花数(daffodil)


    习题2-1 水仙花数(daffodil)

    输出100~999中的所有水仙花数。若三位数满足ABC=A3+B3+C3,则称其为水仙花数。例如153 = 13 + 53 + 33,所以153是水仙花数。

    方法一:

     for(int a=1;a<10;a++)
     {
      for(int b=0;b<10;b++)
      {
       for(int c=0;c<10;c++)
       {
        if(a*100+b*10+c==a*a*a+b*b*b+c*c*c)
        {
         printf("%d \n",a*100+b*10+c);
        }
       }
      }
     }
     return 0;
    

    对于第一种方法,三层for循环,除了第一层要执行9次之外,剩下的都要执行10次,那么if判断语句就执行了900次,用计时器的话时间很短,但如果继续增加嵌套循环的层数,每增加一层,判断语句执行次数变大10倍。

    方法二:

     for(int i=100;i<1000;i++)
     {
      int m=i;
      int a=i/100%10,b=i/10%10,c=i/1%10;
      if(m==a*a*a+b*b*b+c*c*c)
      {
       printf("%d \n",i);
      }
     }
     return 0;
    

    对于第二种方法,if判断语句执行了900次,但是比方法一多了三步分解运算,每个分解运算也要执行900次,不过用计时器的话跟方法一差不多,如果增大上界的话,上界扩大十倍,循环体执行次数增加1000次。

  • 相关阅读:
    9、 docker容器数据卷
    第十八章 MySQL数据库优化
    第十七章 MySQL的VIP漂移和Atlas
    第十六章 MHA高可用(续)
    第一章 shell基础
    第十五章 MHA高可用
    第十四章 MySQL的各种主从
    第十三章 MySQL的主从复制
    第十二章 MySQL的恢复与备份
    第十一章 MySQL日志详解
  • 原文地址:https://www.cnblogs.com/AlexKing007/p/12339596.html
Copyright © 2020-2023  润新知