|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
百钱百鸡是我国古代数学家 张丘建 在《算经》一书中提出的数学问题:
/ z! Z- f3 z6 h" x( r1 j1 P鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。& Q; H/ t! Q$ _
百钱买百鸡,问鸡翁、鸡母、鸡雏各几何? (*)注:本题出自浙江省普通高中《信息技术》(必修一)P100页第6题 →【传送门】 - 温馨提示:该传送门需要一星及其以上会员才能正常显示!
复制代码 翻译成现代文是:. q- C+ r8 w# a) c; V
公鸡5元一只,母鸡3元一只,小鸡1元三只;
/ t ?7 A( V U; S- Q' l, Y1 t4 G请问用100元买一百只鸡,那么公鸡、母鸡、小鸡各有多少只? # [ P, m. x4 W
题目要求总共买 100 只鸡,由此可知,所买公鸡的数量肯定在 0~20 之间;
$ F6 F' n- {) j# C4 E; v, k: o8 d6 a% g. E4 L1 }
同理,母鸡的数量在 0~33 之间;
- W$ w6 d0 t% A# ~& V& e& L7 x7 L S, \7 @7 z/ I$ s; u
创建变量 cock 代替公鸡,hen 代替母鸡,chicken 代替小鸡;
( H9 f9 Z$ D( s& Z' V+ l' s# i5 j3 V
那么 cock+hen+chicken == 100,将百钱买百鸡问题就转化成解方程组。
( X/ i4 [0 R) U' z7 [$ ^& P
2 u# }3 b7 \6 X H P一旦可以写成公式,那么就可以用程序来代替。
; z+ p7 w' Q# _ X# ^' M# ~) y
除了上面的条件,还有保证价格之和为100元:cock*5 + hen*3 + chicken/3 == 100* }" k6 C/ t! `3 Q" Y, |
0 f; [7 W0 q d. r9 ~对于方程组,最简单粗暴的方式就是用 穷举循环 的方法来解决!- G) U* l, A" x( T) R4 q
% }: N3 P4 U5 O$ v7 H" c. ^- Q7 d
反正计算机最擅长的“傻算”,呵呵~
7 M0 l _7 C$ R7 b Y6 ~9 e. L1 Y+ u
% i1 d ^. W# W. `0 ?通过对未知数可变范围的穷举,验证方程在什么情况下成立,从而得到相应的解。
, C; R' i6 ?; `2 i' Z+ X
4 l, {6 S* {6 S9 X! Kcock 的取值范围是 0~20,可用以下循环语句实现:( ^" J- g& q$ P& l, q
7 W* B& _* M5 N0 u& t) ?8 `9 X1 n2 ?& E- D+ \" d
钱的数量是固定的,要买鸡的总数量也是固定的!3 e8 D7 D6 ?. r c3 b
; A5 }6 D, i8 P+ S b/ z
既然穷举完公鸡,就在其基础上穷举母鸡,然后再在其基础上再穷举小鸡。5 o- }+ S$ U& ^, X( I
2 B$ ?8 e, W$ L2 n! m: c
每一次都傻算就好,我们可以利用三层循环的嵌套来解决:, u: N" a: N, I7 u' I
4 ?' {) D' @4 ]( } y# M
- 第一层循环控制公鸡的数量
- 第二层控制母鸡的数量
- 最内层控制小鸡的数量
5 _4 P$ l, p/ t% j; f) K
1 r G' }- S. l/ ]7 T, _每层循环的初值是 0(即买的 100 只鸡中,可能没有公鸡,也可能没有母鸡或小鸡)
0 ` A" V- @& V" F0 m+ \) a
& _5 m3 U9 k% B1 Q$ s循环的控制条件就是公鸡、母鸡和小鸡用百钱分别最多能够买到的数量!
0 |, ~' W! s2 A R& g( K2 }) B9 A) O1 m/ @5 O! S# C
公鸡最多 20 只,母鸡最多 33 只,小鸡最多 100 只。
/ O( g. N# V2 a$ x# X. c3 x+ T: d: i/ {8 {: `) q Y( v+ K2 J
穷举循环的特点就是把所有情况都考虑到,因此每层循环执行一次,对应循环变量的值就要加 1 。
+ }- y% O& g$ c! X' a/ b& \: m8 p# z* N2 s
很傻很粗暴的循环就好,很方便理解对吧!' [4 u z! E! a/ n5 h
4 v) M( p- V$ O! t0 o9 f
↓↓↓ 化成流程图就是:(点击查看大图)
) ?9 ?9 v! z5 k. U
4 d) c5 @. h4 j7 j2 F, d
' ~# x; J: q5 @# v5 d+ }) I
; q1 m6 u9 z [' `! A2 e& x根据流程图,构建程序框架,编写代码如下:6 q) z# x$ P" r9 \3 {
- # -*- coding: utf-8 -*-
+ M3 Q1 _# f* k. C L - """/ L% d0 U- C, q$ g( I
- @Team: 新大榭论坛. E# R9 N" U/ x
- @Author: 张黎斌% j6 a5 Q( V2 \$ B, M- S( K
- @update: 2021-07-25; k7 f$ x; G ^; ~* L# L
- @Version: v1.1
5 R5 ]1 [3 f1 L5 E3 z2 ]5 Y - @BBSid: 7137
- y, I, A4 l- q$ C6 V" b( y - @Level: A: E! _# a! ]$ ]
- ---------------------------
/ A9 u2 R0 @+ q8 g - 古代经典《百钱百鸡》问题
" F1 m# S& r' ^3 } - ---------------------------, c% H2 {% X3 y' P5 m
4 M0 E0 [9 D/ X/ H9 x# t$ [6 e$ `& }$ K- """
; Y# |: I. H' Z! Q1 {/ M1 ^ - print("+----------------------------------------------------------+"), }( h' {/ n: g6 j& q, R8 w9 O
- print(">>> 新大榭Python文件启动程序(py文件双击) V1.2.21.0727 ")2 ~7 d1 k& ?0 x' w, n3 O4 \
- print("+----------------------------------------------------------+")
' H) }! ?- X/ G* e& S5 B' Y - print(">>> 新大榭Web实验室 http://lab.daxie.net.cn/ ")
6 v/ f1 f# Z2 ]3 w- i p- o - print("+----------------------------------------------------------+")
) ~# D3 G# T; E* p/ Z( B - print("↓↓↓ 古代经典《百钱百鸡》问题")
# H4 W( J' }6 f+ u - print("+----------------------------------------------------------+")! H. Y5 |, M7 n+ b
& X. ^, |# L1 t- # 以下为主程序核心代码 ↓↓↓- g: B, _: h0 u0 [' Z% C# t9 ?7 A! ]* X
, l" ^7 @3 V: \- cock = 0$ R0 F, z9 ?% F: l' {( H
- while cock <= 20:, N/ `$ `& q' `- P# s
- # 内层循环控制母鸡数量取值范围为0~331 B! C( [! F/ \1 ]
- hen = 0
0 D0 p4 [' f# N. B- l: O3 X& P6 e - while hen <= 33:
% C Y! ~7 [3 x( y- I( W - # 内层循环控制小鸡数量取值范围为0~100- W6 p) h2 D# d2 Y
- chicken = 04 w6 u( d7 x' z9 S4 R+ u
- while chicken <= 100:
e% x+ \ b/ H( M$ ^ - # 条件控制
( {5 i) k6 U- j. {2 m - if (5 * cock + 3 * hen + chicken / 3.0 == 100) and (cock + hen + chicken == 100):
4 ?9 \4 L# I% K% f. F. h - print("cock=%d,hen=%d,chicken=%d\n" % (cock, hen, chicken))
- S( H9 o5 o; H - chicken += 11 n/ V0 A( t7 L3 p" q! Y
- hen += 1 H( z! R; X' d' Y
- cock += 1
7 V; c5 m$ V2 Z9 U8 D2 j$ b3 \: b - 6 f) A1 S3 z4 Y8 [, j1 S% G
- # ↓↓↓ 以下代码优化与答题无关,可屏蔽IDLE程序意外退出!
$ b5 K5 F0 Y* z s9 ^5 w
+ @; j" ^+ v& n$ y8 U: h) j- print("┏----------------------------┓")
1 ]+ Y2 a8 @- x# h. |* X% D - print("┣--- 按下回车键即退出程序 ---┫")
3 O6 } O. t G" Y& o% ~* b6 o - print("┗----------------------------┛") # S7 _* y9 f$ W9 P' L: z2 ^
- input(">>>")
复制代码 / Q5 M# b' Q+ C
好了,课间休息十分钟吧,咱们稍后回来 ... |
-
-
7137_例1.zip
843 Bytes, 下载次数: 95, 下载积分: 财富 -1 点
课件源代码 - while循环
|