zoukankan      html  css  js  c++  java
  • 算法笔记_day1_自顶向下(循环)

    自顶向下:从全局走向局部,特别适合有嵌套循环的时候。

    ey:一个数如果恰好等于它的因子之和,(包括1,但不包括他本身);这个数就称为完数。

      例如:28的因子是:1,2,4,7,14;28=1+2+4+7+14;那么28就是一个完数。

      求:1000以内的完数,并输出每个完数的因子(从小到大输出);

    分析:这个问题变成球一个数的因子,并且每个因子只被记录一次,用数组a[]来记录,然后就求和,判断是否是完数,是,输出a[];

    自顶向下设计:就是先设计顶层,然后步步深入,逐层细分,逐步求精,直到整个问题可以用程序设计语言表述出来。

    本题的设计过程如下:

    1.顶层设计:

      for(i=2;i<=n;i++)

      {

        A.判断i是否是完数;

        B.是完数就按要求输出;

      }

    2. A 判断i是否是完数的算法

      for(j=2;j<i;j++)

      {

        C.找i的因子,并累加;判断相等i;

        D.如果累加值等于i,是完数就走B

      }

    3.C 找i的因子并求累加值:

      int s=1;

      for(j=2;j<i/2;j++)

      {

        //不包括本身,最大因子不会超过本身的一半。

        if(j%i==0)  s=s+j;

      }

    D if(s==i)    B;

    4.B考虑输出,

      应该开辟数组存储数据i的所以因子,并记录其因子的个数;

      int a[],k;

      for(j=2;j<i;j++)

        if(j%i==0)

        {s=s+j;a[k]=j;k++}

      if(s==i)

      {for(j=0;j<k;j++) print(a[i]);}

    完整代码:

      int i,j,k;

      int s,a[20];

      for(i=1;i<=1000;i++)

      {

        s=1;

        k=0;

        //A

        for(j=2;j<i/2;j++)

        {  

          if(j%i==0)

          {s=s+j;a[k]=j;k++}

        }

        if(s==i)

        {

          print(1);//循环是从2开始的。

          for(j=0;j<k;j++)

            print(a[k]);

        }

      }

  • 相关阅读:
    记录下Cookie与Session
    宝塔部署 springboot 项目遇到的 一些bug处理方案
    [IDEA] [SpringBoot] 项目所写的内容不能同步到编译出的文件中
    cookie和session的区别
    JVM类加载
    线程与线程池
    子父类继承相关(static)
    界面控件开发包DevExpress 9月正式发布v21.1.6
    Delphi开发工具DevExpress VCL全新发布v21.1.5
    强大的Visual Studio插件CodeRush v21.1.7已正式发布
  • 原文地址:https://www.cnblogs.com/wust221/p/3033902.html
Copyright © 2011-2022 走看看