优选枚举法解决百元买百鸡
- 格式:ppt
- 大小:902.50 KB
- 文档页数:15
试题青少年编程等级考试Python编程一级试卷3程序填空阅读填空程序试题一、程序填空1.程序设计:在舞会上,男生、女生各自排成一队。
舞会开始时,依次从男队和女队的队头各出一人配成舞伴。
跳完后的两人重新回到队尾。
例如:boy=['Alex','Steven','Jack'],girl=['Ada*,'Babs'.,'Danla','Jane']输出:Turn1:(Alex,Ada)Turn2:(Steven,Babs)Turn3:(Jack,Danla)Turn4:(Alex,jane)……Turn12:(Jack,jane)代码如下:boy=['Alex','Steven',‘Jack']girl=['Ada','Babs','Danla','Jane']for i in range(12):x,y=① #出队print(“Turn{:2}):({},{})".format(i+1,x,y))boy.append( ② ) #再进队girl.append( ③ ) #再进队(1)程序代码中①处正确的代码是(_______)。
A.boy.pop(l).girl.pop(l) B.girl.pop(l),boy.pop(l)C.boy.pop(0),girl.pop(0) D.girl.pop(0),boy.pop(0)(2)程序代码中②处正确的代码是(_______)。
A.x B.y C.i D.i+1(3)程序代码中③处正确的代码是(_______)。
A.x B.y C.i D.i+12.将下列程序代码补充完整:某同学参加了学校体检,体检的医生告诉他体重超重,需要加强运动。
该同学了解到运动时,心率如能控制在一定范围内,对增强心血管系统和呼吸系统的功能都有很好的效果;超出范围,对身体反而会有损伤。
利用“百钱买百鸡”探讨穷举法山东省鱼台县第一中学范海涛2009年7月23日16:35 浏览:97 专家浏览:0 | 评论:10 专家评论:0利用“百钱买百鸡”探讨穷举法【课标要求】(1)了解穷举法的基本概念及用穷举法设计算法的基本过程。
(2)能够根据具体问题的要求,使用穷举法设计算法,编写程序求解问题。
【教材处理】由于这是学生首次接触用非解析法解题,如果要求学生很快掌握其基本过程并且能对算法进行优化,将是不现实的。
尤其是考虑到学生的信息技术基础参差不齐,可能差距较大,基础差的学生在可能不能接受太多的内容;而且,就算能“吸收”到全部内容,未必就能全部“消化”。
本节课选取来自《张邱建算经》的百钱买百鸡问题作为本次教学的主题。
这样既能提高学生学习的兴趣,又能使学生容易掌握知识,还可以培养学生的民族自豪感和通过建立数学模型和设计程序解决实际问题的习惯。
【学生情况分析】1、学生在本节课前学习高中信息技术新课程的《算法与程序设计》模块已经有一段时间了,学生对算法和程序设计有了一定的认识,但是在面对实际问题时如何设计算法并且用程序实现算法来解决问题上,尤其是对于无法用解析法解决或者是用解析法解决比较困难的问题如何设计算法还是没有什么思路;2、“百钱买百鸡”问题的数学模型是解不定方程,学生在初中的数学课上学过。
本次课在原有知识的基础上,通过对实际问题的分析找到合适的数学模型,使学生基本理解和掌握穷举法解题的思路;【教学目标】1、知识与技能(1)了解非解析法解题的基本思路;(2)理解和掌握穷举法解题的思路,2、过程与方法经历分析问题、建立数学模型、编写和调试程序,得到最终结果的过程,理解和掌握用穷举法解题的基本思路与过程;3、情感态度与价值观(1)通过主题任务的完成,激发民族自豪感和自身的成就感;(2)通过小组讨论与探究活动,提高团队合作能力,促进探究的热情;(3)通过结合学习生活的实际例子,进一步提高利用信息技术解决学习、生活问题的能力。
学号:0121210680225《算法设计与分析B》大作业题目多种解法求百钱百鸡问题学院计算机科学与技术学院专业软件工程班级Sy1201姓名李安福指导教师何九周2014 年12 月26 日多种解法求百钱百鸡问题摘要:中国古代数学家张丘建提出的“百钱买百鸡”可以采用蛮力法来解决。
本文给出了百钱百鸡问题的描述,采用蛮力法来解决这个问题,并通过分析对算法进行了优化,进一步提高了解决此问题的效率。
关键字:枚举,执行效率,蛮力法,不定方程,循环变量。
1引言蛮力法是一种简单直接地解决问题的方法,通常直接基于问题的描述和所涉及的概念定义。
这种方法经过很少的思考,把问题的所有情况或所有的过程交给计算机去一一尝试,从中找出问题的解。
由于计算机运算速度快,在解决问题时可采用这种“懒惰”的策略。
蛮力法的主要优点在于它是有广泛的适用性和简单性;它的缺点是大多数蛮力算法的效率都不高。
2问题概述 百钱百鸡问题:中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?3问题的分析题目分析与算法设计这是一个古典数学问题我们假设公鸡、母鸡和小鸡的个数分别为x,y,z,那么买公鸡的钱数为5x ,买母鸡的钱数为3y ,买小鸡的钱数为z/3;再由题意,x,y 和z 的和为100,问题化为可三元一次方程组,该问题的数学模型如下:⎩⎨⎧=++=++)(100)(1003/35百鸡百钱z y x z y x这里x,y,z 为正整数,且z 是3的倍数;由于鸡和钱的总数都是100,可以确定x,y,z 的取值范围:1) x 的取值范围为1~20 2) y 的取值范围为1~33 3) z 的取值范围为1~99对于这个问题我们可以用穷举的方法,遍历x,y,z 的所有可能组合,最后得到问题的解。
4算法设计 4.1算法设计14.1.1数据要求问题中的常量: 无无问题的输出:int x,y,z /*公鸡、母鸡、小鸡的只数*/4.1.2初始算法1.初始化为1(循环语句中初始值为1);2.计算x循环,找到公鸡的只数;3.计算y循环,找到母鸡的只数;4.计算z循环,找到小鸡的只数;5.结束,程序输出结果后退出。
百钱百鸡问题及其扩展(陕西师范大学计算机科学学院10级计算机科学与技术)摘要:本文给出了一个百钱百鸡的问题,采用了贪婪法中的枚举法来解决这个问题,通过对比得出了较优的算法,并进一步的扩展了此问题,给出了最佳解决方案。
关键词:贪婪法;枚举法;扩展100 money and one hundred chicken problem and its extension( School of Computer Science ,Shaanxi Normal University ,level 10 computer science and Technology)Abstract: This paper presents 100 money and one hundred chicken problem, using the greedy method of enumeration method to solve this problem, by comparing the obtained optimal algorithm, and further extensions of this problem, and gives the best solution.Key words: greed method; enumeration; extension1、引言蛮力法是基于计算机运算速度快这一特性,在解决问题时采用一种“懒惰”的策略。
比较常用的有枚举法、穷举搜索算法等。
对于百钱百鸡问题,我们可能会想到列出两个三元一次方程,去解这个不定解方程,就能找出问题的解,所以我们想到用枚举法来进行算法设计。
2、问题概述百钱百鸡问题。
中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?3、求解该问题的具体算法:枚举法用枚举法解决问题,通常可以从两个方面进行算法设计。
枚举法,常常称之为穷举法,是指从可能的集合中一一枚举各个元素,用题目给定的约束条件判定哪些是无用的,哪些是有用的。
能使命题成立者,即为问题的解。
采用枚举算法解题的基本思路:(1)确定枚举对象、枚举范围和判定条件;(2)一一枚举可能的解,验证是否是问题的解下面我们就从枚举算法的的优化、枚举对象的选择以及判定条件的确定,这三个方面来探讨如何用枚举法解题。
枚举算法应用例1:百钱买百鸡问题:有一个人有一百块钱,打算买一百只鸡。
到市场一看,大鸡三块钱一只,小鸡一块钱三只,不大不小的鸡两块钱一只。
现在,请你编一程序,帮他计划一下,怎么样买法,才能刚好用一百块钱买一百只鸡?算法分析:此题很显然是用枚举法,我们以三种鸡的个数为枚举对象(分别设为x,y,z),以三种鸡的总数(x+y+z)和买鸡用去的钱的总数(x*3+y*2+z)为判定条件,穷举各种鸡的个数。
下面是解这个百鸡问题的程序var x,y,z:integer;beginfor x:=0 to 100 dofor y:=0 to 100 dofor z:=0 to 100 do{枚举所有可能的解}if (x+y+z=100)and(x*3+y*2+z div 3=100)and(z mod 3=0)then writeln('x=',x,'y=',y,'z=',z); {验证可能的解,并输出符合题目要求的解} end.上面的条件还有优化的空间,三种鸡的和是固定的,我们只要枚举二种鸡(x,y),第三种鸡就可以根据约束条件求得(z=100-x-y),这样就缩小了枚举范围,请看下面的程序:var x,y,z:integer;beginfor x:=0 to 100 dofor y:=0 to 100-x dobeginz:=100-x-y;if (x*3+y*2+z div 3=100)and(z mod 3=0)thenwriteln('x=',x,'y=',y,'z=',z);end;end.未经优化的程序循环了1013次,时间复杂度为O(n3);优化后的程序只循环了(102*101/2)次,时间复杂度为O(n2)。
百鸡问题
公元5世纪末,我国古代数学家张丘建在他所撰写的《算经》中,提出了这样的一个问题:“鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一.百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”意思是公鸡5元一只,母鸡3元一只,小鸡1元三只。
用100元100只鸡,求公鸡、母鸡、小鸡各买几只。
假设a 为公鸡只数,b 为母鸡只数,c 为小鸡只数,如果把问题转化为n 元钱买n 只鸡,针对上述问题n =100,根据题意可得出下面的约束方程:
53/3%30
a b c n
a b c n c ++=++==
用穷举法实现如下所示:
图4.3 穷举法求解百鸡问题
这个算法有三重循环,枚举公鸡数量的外循环,枚举母鸡数量的中间循环以及枚举小鸡数量的内循环,主要执行时间取决于内循环的循环体的执行次数,需要执行(n+1)3次,当n=100时,内循环需要执行大于100万次。
考虑到n元钱只能买到n/5只公鸡或n/3只母鸡,因此有些组合可以不必考虑,而小鸡的数目又取决于公鸡和母鸡的只数,上述的内循环可以省去。
图4.3 改进算法求解百鸡问题
改进算法只有两层循环,枚举公鸡数量的外循环和枚举母鸡数量的内循环,内循环的执行次数为(n/5+1) (n/3+1)。
当n=100时,内循环执行21*34=714次,这和穷举算法的100万次相比,仅为原来的万分之七,有重大改进。
优化枚举算法提升计算思维 ——以“百鸡百钱问题”为例发表时间:2020-12-30T15:07:59.553Z 来源:《中国教师》2020年第26期作者:屈玫琦[导读] 如今,在教学中培养和提升学生的计算思维已成了教学中的重中之重。
屈玫琦杭州市富阳区场口中学摘要:如今,在教学中培养和提升学生的计算思维已成了教学中的重中之重。
本文主要通过在“百钱百鸡问题”的教学中引导学生对枚举算法进行优化和完善来提升学生的计算思维,并迁移到类似问题中,提高学生解决问题的实际能力。
关键词:计算思维;枚举算法;算法优化一、计算思维与枚举法概述1.计算思维简述计算思维并不是一个新概念,人生而有之。
从图灵等人对计算机科学的研究以来,100年的时间,我们进入了信息社会。
计算机领域的发展扩大了计算思维的影响范围,使之成为继实证思维和逻辑思维之后被确立的第三种科学思维模式。
从中小学开始,计算思维就在学科教学中被朦朦胧胧的使用,却从没有向如今般受到重视。
2006年,周以真提出计算思维(Computational Thinking)的概念在全球的计算机教育届引起了广发的关注。
各科学家普遍认为计算思维是计算机领域最具基础性和普遍性,到2050年,每个地球公民都应该掌握计算思维 [1]。
2017年,我国的《普通高中信息技术课程标准》明确指出,计算思维是学科的四大核心素养之一,是个体运用计算机科学领域的思想方法,在形成问题解决方案的过程中产生的一系列思维活动。
具备计算思维的学生在具体的信息活动中能够采用计算书能够处理的方式界定问题,抽象特征、建立结构模型合理组织数据,并运用合理的算法解决问题。
[2课程标准]2.枚举法概述枚举法也称穷举法,是指在有穷的可能解得集合中,逐个搜索集合的每一个元素,用问题给定的检验条件去判断此解是否符合条件,若满足条件,此元素为该问题的一个解。
枚举法是浙江信息技术学业水平考试要求掌握的算法,因为其简单、易理解等特点,也作为信息技术程序设计课程的入门算法。
【枚举法】百钱百鸡2题⽬描述中国数学家张邱建(公元五世纪,其它资料不详),在他的《算经》中提出了著名的“百钱买百鸡”问题:鸡翁⼀,值钱五,鸡母⼀,值钱三,鸡雏三,值钱⼀。
百钱买百鸡,问翁、母、雏各⼏何?你的任务是:根据给定的钱数m,和买到的鸡数n,输出所有的⽅案。
如果没有可⾏⽅案,输出None。
输⼊格式只有两个整数m、n(0<m,n<10000) 。
表⽰买鸡⽤的总钱数和总只数。
输出格式若⼲⾏,每⾏3个数,表⽰⼀种可⾏⽅案,分别表⽰鸡翁、鸡母、鸡雏的数量。
样例输⼊1100 100样例输出10 25 754 18 788 11 8112 4 84问题提⽰所有⽅案,第⼀优先级按公鸡的数量从⼩到⼤排列。
思路分析枚举法的⼀些套路,确定以下内容:枚举对象。
有⼏个来⼏重循环枚举范围。
判断条件。
根据题⾯信息,三个未知的枚举对象:公鸡、母鸡和⼩鸡。
鸡的数量最多n只。
需要满⾜两个条件总数为n总的价格为m第⼀版框架for(int i=0;i<=n;i++){//枚举公鸡的可能数量for(int j=0;j<=n;j++){//枚举母鸡的可能数量for(int k=0;k<=n;k++){//枚举⼩鸡的可能数量if(k%3==0&&(i+j+k==n)&&(5*i+3*j+k/3==m)){//数量和钱满⾜要求}}}}分析复杂度三重循环O(n3)的复杂度。
该题⽬范围,显然会超时。
需要进⼀步优化。
对于枚举法优化的⼏个思考⽅向:减少枚举对象剪枝hash代替判断根据数量关系,三种鸡加起来总共n只,那么当已经确定公鸡i,母鸡j时,⼩鸡的数量可等于n−i−j不⽤再循环枚举了。
这样就减少了⼀重循环。
再根据钱的总价为m,那么公鸡最多就是买m5只,母鸡最多就是买m3只,不需要枚举到n,减少⾮必要的枚举。
第⼆版框架for(int i=0;i<=m/5;i++){//枚举公鸡的可能数量 for(int j=0;j<=m/3;j++){//枚举母鸡的可能数量Processing math: 100%int k=n-i-j;//计算⼩鸡的数量if(k%3==0&&(5*i+3*j+k/3==m)){//钱满⾜要求}}}}实现代码#include <iostream>#include <cstdio>using namespace std;int main(){int m,n;bool flag=false;cin>>m>>n;for(int i=0;i<=m/5;i++){//枚举公鸡的数量for(int j=0;j<=m/3-i;j++){//枚举母鸡数量int k=n-i-j;//计算⼩鸡的数量if(k<0) break;//⼩鸡数量⼩于0 不符合要求if(k%3==0&&5*i+3*j+k/3==m){//看钱的总数是否是m flag=true;//标记有存在⽅案cout<<i<<" "<<j<<" "<<k<<endl;}}}if(!flag){//没有组合输出Nonecout<<"None";}return 0;}。
利用“百钱买百鸡”探讨穷举法山东省鱼台县第一中学范海涛2009年7月23日16:35 浏览:97 专家浏览:0 | 评论:10 专家评论:0利用“百钱买百鸡”探讨穷举法【课标要求】(1)了解穷举法的基本概念及用穷举法设计算法的基本过程。
(2)能够根据具体问题的要求,使用穷举法设计算法,编写程序求解问题。
【教材处理】由于这是学生首次接触用非解析法解题,如果要求学生很快掌握其基本过程并且能对算法进行优化,将是不现实的。
尤其是考虑到学生的信息技术基础参差不齐,可能差距较大,基础差的学生在可能不能接受太多的内容;而且,就算能“吸收”到全部内容,未必就能全部“消化”。
本节课选取来自《张邱建算经》的百钱买百鸡问题作为本次教学的主题。
这样既能提高学生学习的兴趣,又能使学生容易掌握知识,还可以培养学生的民族自豪感和通过建立数学模型和设计程序解决实际问题的习惯。
【学生情况分析】1、学生在本节课前学习高中信息技术新课程的《算法与程序设计》模块已经有一段时间了,学生对算法和程序设计有了一定的认识,但是在面对实际问题时如何设计算法并且用程序实现算法来解决问题上,尤其是对于无法用解析法解决或者是用解析法解决比较困难的问题如何设计算法还是没有什么思路;2、“百钱买百鸡”问题的数学模型是解不定方程,学生在初中的数学课上学过。
本次课在原有知识的基础上,通过对实际问题的分析找到合适的数学模型,使学生基本理解和掌握穷举法解题的思路;【教学目标】1、知识与技能(1)了解非解析法解题的基本思路;(2)理解和掌握穷举法解题的思路,2、过程与方法经历分析问题、建立数学模型、编写和调试程序,得到最终结果的过程,理解和掌握用穷举法解题的基本思路与过程;3、情感态度与价值观(1)通过主题任务的完成,激发民族自豪感和自身的成就感;(2)通过小组讨论与探究活动,提高团队合作能力,促进探究的热情;(3)通过结合学习生活的实际例子,进一步提高利用信息技术解决学习、生活问题的能力。
试卷python软件编程等级考试(三级)编程实操题程序填空阅读填空程序试题一、程序填空1.程序设计:在舞会上,男生、女生各自排成一队。
舞会开始时,依次从男队和女队的队头各出一人配成舞伴。
跳完后的两人重新回到队尾。
例如:boy=['Alex','Steven','Jack'],girl=['Ada*,'Babs'.,'Danla','Jane']输出:Turn1:(Alex,Ada)Turn2:(Steven,Babs)Turn3:(Jack,Danla)Turn4:(Alex,jane)……Turn12:(Jack,jane)代码如下:boy=['Alex','Steven',‘Jack']girl=['Ada','Babs','Danla','Jane']for i in range(12):x,y=① #出队print(“Turn{:2}):({},{})".format(i+1,x,y))boy.append( ② ) #再进队girl.append( ③ ) #再进队(1)程序代码中①处正确的代码是(_______)。
A.boy.pop(l).girl.pop(l) B.girl.pop(l),boy.pop(l)C.boy.pop(0),girl.pop(0) D.girl.pop(0),boy.pop(0)(2)程序代码中②处正确的代码是(_______)。
A.x B.y C.i D.i+1(3)程序代码中③处正确的代码是(_______)。
A.x B.y C.i D.i+12.请在空格处填写正确的代码,使程序完善。
实现功能:绘制y=x2-2x+ 1的图像#加载numpy模块并限简洁的别名为npimport numpy as np#加载matplotlib.pyplot模块并限简洁的别名为pltimport matplotlib.pyplot as plt#x在-7到9之间,每隔0.1取一个点x=np.arange(-7,9,0.1)_____ = x**2-2*x+1plt.plot(x,________)plt.title('y=x*x-2*x+1')plt.xlabel('x')plt.ylabel('y')plt._________3.阅读程序。
算法经典问题系列1 百钱买百鸡问题一说起唐朝,人们就会情不自禁地想起诗歌,绝对没有人会提到数学在数学上,虽说唐代并没有产生与其前的魏晋南北朝或其后的宋元相媲美的大师,却在数学教育制度的确立和数学典籍的整理方面有所建树.长达近三百年的唐代在数学方面最有意义的事情莫过于《算经十书》的整理和出版,这是高宗李治下令编撰的。
除了《周牌算经》《九章算术》《海岛算经》和《缀术》以外,《算经十书》中至少还有三部值得一提,分别是《孙子算经》《张丘建算经》和《缉古算经》'这三部书的共同特点是,每一部都提出了一个非常有价值的问题,并以此传世。
《张丘建算经》成书于公元5世纪,作者是北魏人.书中最后一道题堪称亮点,通常也被称为"百钱买百鸡"问题,民间则流传着县令考问神童的佳话书中原文如下:今有鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买鸡百只,问鸡翁、母、雏各几何?题目的意思是,公鸡5文钱1只,母鸡3文钱1只,小鸡1文钱买3只,现在用100文钱共买了100只鸡,问:在这100只鸡中,公鸡、母鸡和小鸡各是多少只?(设每种至少一只)算法分析:此题很显然是用枚举法,我们以三种鸡的个数为枚举对象(分别设为x,y,z),以三种鸡的总数(x+y+z)和买鸡用去的钱的总数(x*3+y*2+z)为判定条件,穷举各种鸡的个数。
枚举法,常常称之为穷举法,是指从可能的集合中一一枚举各个元素,用题目给定的约束条件判定哪些是无用的,哪些是有用的。
能使命题成立者,即为问题的解。
1.采用枚举算法解题的基本思路:2.确定枚举对象、枚举范围和判定条件;3.一一枚举可能的解,验证是否是问题的解下面是解这个百鸡问题的程序var x,y,z:integer;begin for x:=1 to 100 do for y:=1 to 100 do for z:=1 to 100 do if(x+y+z=100)and(x*5+y*3+z/3=100)then writeln('x=',x,'y=',y,'z=',z);{验证可能的解,并输出符合题目要求的解}end.这个算法学生容易想到,而重复是计算机的拿手好戏,算法可读性好。
算法经典问题系列1 百钱买百鸡问题
一说起唐朝 人们就会情不自禁地想起诗歌 绝对没有人会提到数学在数
学上 虽说唐代并没有产生与其前的魏晋南北朝或其后的宋元相媲美的大师 却在数学教育制度的确立和数学典籍的整理方面有所建树.长达近三百年的唐代在数学方面最有意义的事情莫过于《算经十书》的整理和出版 这是高宗李治下令编撰的。
除了《周牌算经》《九章算术》《海岛算经》和《缀术》以外 《算经十书》中至少还有三部值得一提 分别是《孙子算经》《张丘建算经》和《缉古算经》'这三部书的共同特点是 每一部都提出了一个非常有价值的问题 并以此传世。
《张丘建算经》成书于公元5世纪 作者是北魏人.书中最后一道题堪称亮
点 通常也被称为"百钱买百鸡"问题 民间则流传着县令考问神童的佳话书中原文如下
今有鸡翁一 值钱五 鸡母一 值钱三 鸡雏三 值钱一 百钱买鸡百只
问鸡翁、母、雏各几何?
题目的意思是 公鸡5文钱1只 母鸡3文钱1只 小鸡1文钱买3只
现在用100文钱共买了100只鸡 问 在这100只鸡中 公鸡、母鸡和小鸡各是多少只?(设每种至少一只)算法分析
此题很显然是用枚举法 我们以三种鸡的个数为枚举对象(分别设为
x,y,z),以三种鸡的总数(x+y+z)和买鸡用去的钱的总数(x*3+y*2+z)为判定条件 穷举各种鸡的个数。
枚举法 常常称之为穷举法 是指从可能的集合中一一枚举各个元素 用
题目给定的约束条件判定哪些是无用的 哪些是有用的。
能使命题成立者 即为问题的解。
1.采用枚举算法解题的基本思路
2.确定枚举对象、枚举范围和判定条件。
百钱买百鸡问题——一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少)。
这是一个古典数学问题,设一百只鸡中公鸡、母鸡、小鸡分别为x ,y ,z ,问题化为三元一次方程组:⎩⎨⎧=++=++)(100)(1003/35百鸡百钱z y x z y x 这里x,y,z 为正整数,且z 是3的倍数;由于鸡和钱的总数都是100,可以确定x,y,z 的取值范围:1) x 的取值范围为1~20 2) y 的取值范围为1~333) z 的取值范围为3~99,步长为3 对于这个问题我们可以用穷举的方法,遍历x,y,z 的所有可能组合,最后得到问题的解。
数据要求问题中的常量: 无问题的输入: 无问题的输出:int x ,y ,z /*公鸡、母鸡、小鸡的只数*/ 初始算法1.初始化为1;2.计算x 循环,找到公鸡的只数; 3.计算y 循环,找到母鸡的只数; 4.计算z 循环,找到小鸡的只数; 5.结束,程序输出结果后退出。
算法细化算法的步骤1实际上是分散在程序之中的,由于用的是for 循环,很方便的初始条件放到了表达式之中了。
步骤2和3是按照步长1去寻找公鸡和母鸡的个数。
步骤4的细化 4.1 z =14.2 是否满足百钱,百鸡4.2.1 满足,输出最终百钱买到的百鸡的结果 4.2.2 不满足,不做处理 4.3 变量增加,这里注意步长为3 流程图图5-8 程序执行流程图程序代码如下#include "stdio.h"main(){int x,y,z;for(x=1;x<=20;x++)for(y=1;y<=33;y++)for(z=3;z<=99;z+=3){if((5*x+3*y+z/3==100)&&(x+y+z==100))/*是否满足百钱和百鸡的条件*/printf("cock=%d,hen=%d,chicken=%d\n",x,y,z);}}分析程序运行结果如下:cock=4,hen=8,chicken=78cock=8,hen=11,chicken=81cock=12,hen=4,chicken=84对于这个问题实际上可以不用三重循环,而是用二重循环,因为公鸡和母鸡数确定后,小鸡数就定了,即y100z 。