• 常用的循环程序的设计方法


    穷举法

    也成枚举法,基本思想是:首先依据题目的部分条件确定答案的大致范围,然后对此范围内的所有可能的情况进行逐一验证,知道全部情况验证完毕,若某个情况验证符合题目条件,则为本题的一个答案,若全部情况都验证完后均不符合题目条件,则本题无解。

    百钱买白鸡,这是一个经典的不定方程求解问题。问题如下:公鸡5元一只,母鸡3元一只,小鸡1元三只。问:用100元钱买100只鸡,公鸡,母鸡,小鸡各买多少只?

    题目分析:

    假设,公鸡g只,母鸡m只,小鸡x只。

    g+m+x=100

    5g+3m+x/3=100

    可以采用穷举法来求解。

    取值范围为:0<=g<=20

                         0<=m<=33

                         0<=x<=100

    int main()
    {
        int g,m,x;
        for(g=0;g<=20;g++)
        {
            for(m=0;m<=33;m++)
            {
                x=100-g-m;
                if(15*g+9*m+x==300)
                {
                    printf("%4d %4d %4d
    ",g,m,x);
                }
            }
        }
        return 0;
    }

    递推法

    从已知条件出发,逐步推出题目所要求的各中间结果和最后结果的算法即为递推法。

    求n!

    题目分析:

    n!=n(n-1)!

    首先计算出1!,计算2*1!,则推出2!,进一步推出3!,4!,。。。。n!

    int main()
    {
        int n,i;
        int sum=1;
        int flag=1;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
        {
            sum*=flag*i;
        }
        printf("%d
    ",sum);
        return 0;
    }

    求菲波那切数列的第n项。这个数列有如下特点,第1,第2个数为1,从第3个数开始,每个数是前两个数之和,其数列为:1,1,2,3,5,8,.........

    题目分析:

    f1=1               n=1

    f2=1               n=2

    f3=f1+f2         n>=3

    #include<stdio.h>
    
    int main()
    {
        int f1=1,f2=1,f3;
        int i,n;
        scanf("%d",&n);
        for(i=3;i<=n;i++)
        {
            f3=f2+f1;
            f1=f2;
            f2=f3;
        }
        printf("%d
    ",f3);
        return 0;
    }
  • 相关阅读:
    二叉树前、中、后遍历
    程序员节宜冒泡
    HashMap源码分析
    Stack源码解析
    逆袭之旅DAY24.XIA.二重进阶、双色球
    逆袭之旅DAY24.XIA.数组练习
    LY.JAVA面向对象编程.内部类
    LY.JAVA面向对象编程.修饰符
    LY.JAVA面向对象编程.包的概述、导包
    XIA.人机猜拳
  • 原文地址:https://www.cnblogs.com/2228212230qq/p/8439830.html
Copyright © 2020-2023  润新知