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

穷举法

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

百钱买白鸡,这是一个经典的不定方程求解问题。问题如下:公鸡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\n",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\n",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\n",f3);
    return 0;
}

原文地址:https://www.cnblogs.com/2228212230qq/p/8439830.html

时间: 2024-10-11 18:12:17

常用的循环程序的设计方法的相关文章

Unix socket server 程序的设计方法vtuR3n

如果说互联网解决信息不对称,移动互联网解决沟通不及时,那么区块链解决的是信任难建立和价值难共享.比特币3.0时代已经到来,3.0时代意味着"随处可用的区块链".如何实现随处可用?吴萌野老师认为,一是基础链,二是中间件.有关基础链的技术问题和解决方案,吴萌野老师给出的答案是从计算层的改进方向:一是采用更快速的智能合约容器和运行时,并优化共识节点规模.谈到中间件,他希望通过中间件搭建连接互联网云服务和区块链智能合约的中间桥梁,推动区块链应用生态规模化落地. 吴萌野1999年毕业于是清华大学

【转载】算法设计之五大常用算法设计方法总结

转载自http://blog.csdn.net/zolalad/article/details/11393915 算法设计之五大常用算法设计方法总结 一.[分治法]  在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题--直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并.这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)--等.任

Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类Truck是Car类的子类,其中包含的属性有载重量payload.每个 类都有构造方法和输出相关数据的方法.最后,写一个测试类来测试这些类的功 能. package hanqi; public class Vehicle { private int wheels; private int weight

吉首大学_编译原理实验题_基于预測方法的语法分析程序的设计【通过代码】

一.实验要求 实验二 基于预測方法的语法分析程序的设计 一.实验目的 了解预測分析器的基本构成及用自顶向下的预測法对表达式进行语法分析的方法,掌握预測语法分析程序的手工构造方法. 二.实验内容 1.了解编译程序的基于预測方法的语法分析过程. 2.依据预測分析原理设计一个基于预測方法的语法分析程序. 三.实验要求 对给定文法G[S]: S->AT       A->BU     T->+AT|$      U->*BU|$    B->(S)|m 当中,$表示空串. 1.推断上

测试小白基础知识---常用的测试用例设计方法

软件测试的核心是测试用例的编写,是每个测试人员必须掌握的技能!! «««测试第一原则:所有的测试,都必须追溯到需求: «««测试第二原则:测试是无穷尽的,测试必须终止 «««测试用例的设计方法: 一.等价类划分法 某个输入域的子集合,在该子集合中,所有的输入数据对揭露软件中的错误都是等效的. 等价类划分有效等价类和无效等价类 有效等价类:输入的数据,是符合需求的,是合理的合法的. 无效等价类:输入的数据,是不符合需求的,是不合理的. «««等价类划分法用例设计原则: 1.划分有效和无效等价类,为

转:黑盒测试用例设计方法

1. 概述 黑盒测试用例设计方法包括等价类划分法.边界值分析法.错误推测法.因果图法.判定表驱动法.正交试验设计法.功能图法等. 2. 等价类划分法 2.1.              概念 等价类划分法是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例.每一类的代表性数据在测试中的作用等价于这一类中的其他值. 2.2.              等价类划分法的应用 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理

测试用例的设计方法

测试用例的设计方法有: 等价类划分方法,边界值分析方法,错误推理方法,因果图方法,判定表驱动分析方法,正交实验设计方法,功能图分析方法,场景设计方法 等价类划分方法: 基本概念: 一.方法简介 1.定义 是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例.该方法是一种重要的,常用的黑盒测试用例设计方法. 2.划分等价类: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等

算法设计方法:递归的内涵与经典应用

摘要: 大师 L. Peter Deutsch 说过:To Iterate is Human, to Recurse, Divine.中文译为:人理解迭代,神理解递归.毋庸置疑地,递归确实是一个奇妙的思维方式.对一些简单的递归问题,我们总是惊叹于递归描述问题的能力和编写代码的简洁,但要想真正领悟递归的精髓.灵活地运用递归思想来解决问题却并不是一件容易的事情.本文剖析了递归的思想内涵,分析了递归与循环的联系与区别,给出了递归的应用场景和一些典型应用,并利用递归和非递归的方式解决了包括阶乘.斐波那契

Java笔记4-do while循环,break,修饰符,方法的调用

do while循环语法:do{ //循环体}while(条件表达式); 注:它是先执行循环体,后再判断的循环结构. 如:int i = 0;do{ System.out.println("i = "+i); i++;}while(i < 10); ---do while一般用在“交互式”的界面循环中.案例: --------------------------break语句与continue语句break可以用在:1). switch语句中, 表示退出某个case块2). 循环