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]);

        }

      }

  • 相关阅读:
    RHEL7基本命令
    RHEL7VIM编辑器
    hello world
    配置mysql允许远程连接
    c#利用HttpWebRequest获取网页源代码
    C++局部变量详解(笔试题)
    c语言文件常用的操作
    Cocos2dx v3.1 初识(一)
    创建钩子(Hook)
    Extjs4.2.0 Form 的使用
  • 原文地址:https://www.cnblogs.com/wust221/p/3033902.html
Copyright © 2011-2022 走看看