山东省高中信息技术学业水平考试试题网 - 数据与计算|信息系统与社会|数据与数据结构|网络基础|数据管理与分析|移动应用设计|三维设计与创意|开源硬件项目设计|算法初步|智能系统初步

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 557|回复: 0
收起左侧

第二十讲 运用循环结构描述问题求解过程(下)

 关闭 [复制链接]

304

主题

718

帖子

214748万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2147483647
QQ
发表于 2020-7-5 12:20:28 | 显示全部楼层 |阅读模式
第二十讲 运用循环结构描述问题求解过程(下)
学习目标3 o/ W5 M/ j2 N
掌握循环结构。4 }8 S6 U! b1 V0 D2 B! _9 i
学习内容! `: ^* t; W2 |  A
循环嵌套的应用* f+ D) E7 v4 e& G( H  f6 M
单独使用for循环或 while循环单循环语句,往往无法解决复杂的问题。如需要解决类似“工作要做很多遍,而每一遍工作都是需要重复做一些事情”的问题,就要用到多重循环,即“循环嵌套”。如果某一种循环语句中包含着自身或其他循环语句,就称为循环的“嵌套”。for循环或while循环之间可以相互嵌套。1 B, D5 W5 g* G/ i
问题2 Q0 a$ c2 S. `' k
项目小组经过讨论,最后选择购买单价分别为1.8元的笔记本、1.9元的笔、2.1元的小饰品作为活动的奖品和纪念品,每一种物品至少买100件,并且尽可能地用完1000元经费。如何设计方案,才能实现购买物品数量最多呢?如数量相同的情况下余额最小的方案为最佳,则最佳方案中每一种物品的数量是多少?余额是多少?
; N' S9 l; `6 B思考
5 s$ a  N+ Y: a  e' W) X% t1 ?如何运用循环嵌套的方法编程解决上述的最优采购方案设计问题?
& ]3 a; X7 F0 w1 W8 K9 M% m3 F3 x3 W观察$ t% J- c! J: ^4 v
要解决这个问题,需要用到循环嵌套的知识,下面提供了其中一种解法:
0 O: |, ?2 b0 M" w# f- p(1)分析问题。! i$ c% g- J1 D! k& t/ q1 l4 u- ^2 L# v# t
设购买单价为1.8元、1.9元、2.1元的物品数量分别为x,y,z,当前余额为r元,所买物品总数量为s,根据题意有下面关系式:1.8x+1.9y+2.1z≤1000(x,y,z∈N*,N*为自然数),我们分别将x,y,z从100至555,526,476逐个穷举,如果x,y,z的值满足式子1.8x+1.9y+2.1z≤1000(x,y,z∈N*,N*为自然数),如x+y+z>s,则s=x+y+z,r=1000-(1.8x+1.9y+2.1z),并记录此时x,y,z的值;如x+y+z=s,且1000-(1.8x+1.9y+2.1z)<r,则r=1000-(1.8x+1.9y+2.1z),并记录此时x,y,z的值。
5 U6 X8 n/ R+ V(2)设计算法
0 p7 j4 C0 g/ B* G5 H2 C根据上述的分析,可设计出如下的算法:
$ t# c  O9 q5 X5 Z①令x1=100,令y1=100,令z1=100,令s=300,令r=1000-(100×1.8+100×1.9+100×2.1);
5 f9 H7 ^) ^+ B: C" E4 j7 n1 P②x从100~555穷举;
  Q5 M) K$ n) O0 a! I% l4 c$ Jy从100~526穷举;! y& w0 K" d+ h4 I1 L
④z从100~476穷举;0 {' T$ [! D7 u
⑤如果1.8x+1.9y+2.1z≤1000,若x+y+z>s,则s=x+y+z,r=1000-(1.8x+1.9y+2.1z),x1=x,y1=y,z1=x;若x+y+z=s,且1000-(1.8x+1.9y+2.1z)<r,则r=1000-(1.8x+1.9y+2.1z),x1=x,y1=y,z1=z;
7 C  o' R* z* c' }1 _: C- e⑥转步骤④;. p8 z4 j- H" D" f/ Z3 Z/ D
⑦转步骤③;
; @+ M: |) W( |! J⑧转步骤②;9 q! |+ K3 S, x6 N
⑨输出x1,y1,z1,s和r的值。
+ o, N6 F, F0 w" K) ]% d2 g(3)编写程序。
* L% i: U! e6 _: `$ f6 K根据上面设计的算法,编写出解决该问题的程序如下:
5 D/ J7 K; F/ A" R! S
  1. x1=100& B' L; z6 `9 n! m4 t" S, K
  2. y1=100
    % X0 N9 r8 ^$ p3 g  M) N
  3. z1=100  Y* z2 j, m  ]* r# p% g6 k. n
  4. s=300
    1 S& p& c4 E: q* M! L3 U( q" X
  5. r=1000-(100*1.8+100*1.9+100*2.1)3 G& ]* W- E. h2 c
  6. ; P1 x5 t' Z5 Y6 ?. }" r7 {
  7. for x in range(100,555):
    * w& K5 V# T. \& C, Y3 n
  8.     for y in range(100,526):
    $ t: Q! V7 I# I3 o8 p* E
  9.         for z in range(100,476):2 |& \5 i4 N0 c; @
  10.             if 1.8*x+1.9*y+2.1*z<=1000:' L; Y1 t. j4 g+ f
  11.                 if x+y+z>s:
    7 A; w4 [7 L8 x. x2 T; y/ O
  12.                     s=x+y+z
    6 Y* }. l, i/ b$ a
  13.                     r=1000-(1.8*x+1.9*y+2.1*z)( d* {" \: D9 U  `0 F, F
  14.                     x1=x
    7 U/ U& I1 B% ~+ L0 {
  15.                     y1=y4 P' Z0 l2 V" _
  16.                     z1=z
    . a( w0 A4 }7 l4 D: V: I, `
  17.                 if x+y+z==s and r>=1000-(1.8*x+1.9*y+2.1*z):4 @- l: R2 _5 y, C; c/ S% p* c  ^+ J
  18.                     s=x+y+z
    0 a/ s2 F$ ?* a( [- [: s" d
  19.                     x1=x
    $ J1 y, _: I8 h9 [
  20.                     y1=y; I- g3 m* g  O
  21.                     z1=z
    / {( L1 u% m' q& n% c  Q
  22.             else:
    : }& X4 \8 t8 M5 f
  23.                 break6 i! D( ^) Y2 q4 Z2 y
  24. ' c/ U3 z$ b" n' p2 L# B- A
  25. print("符合条件的最优方案是:")7 d  O: ]+ B; t6 h! y
  26. print("单价1.8元的五批的数量是:", x1)
    6 e& X- ~! B/ F/ u* I9 `* A5 r
  27. print("单价1.9元的五批的数量是:", y1)! G! |+ |  y- U' c, E. h
  28. print("单价2.1元的五批的数量是:", z1)
    0 d2 E$ p+ L7 s, E4 ^6 X* J0 v
  29. print("共买到的礼物总数量为:",s)& X2 O+ y& t+ w% S" I6 W  {
  30. print("余款还剩:", r,"元")
复制代码
(4)调试运行
( p! E, r+ C& T5 {将程序输入计算机进行调试运行,结果如下所示:. x" K/ [  k) i* E1 Z
符合条件的最优方案是
' A/ t( B* [2 W" v! u单价1.8元的物品的数量是( V& a6 T& r6 w4 D3 y" g
单价19元的物品的数量是:106
5 m/ v" s9 V4 Y; R9 G* u& u单价2.1元的物品的数量是:100
$ h3 g. S. n# i2 t' M# E+ @% C共买到的礼物总数量为:533* E7 \$ `! O- ]8 ^' U8 F
余款还剩:00元
3 ]1 {. u$ o  l$ ?循环控制的应用1 [, `* y! M3 {; U* N4 M$ o) D% V
循环控制包含控制循环变量的变化方式和控制循环的跳转。无论是for循环还是while循环,都需要一个控制循环的变量来控制循环的执行。但是,有些循环仅靠循环变量自身的变化难以达到想要的控制效果,因此需要用到控制循环的跳转语句。实现控制循环的跳转需要用到 break和 continue两个关键字。其中, break是中断循环, continue是跳出本次循环体的执行。% [! Z- B! R! U, i2 L
1. break语句0 l2 B! }3 Q0 D% ]# g, p% a6 d9 I
在循环结构中,可以用 break语句跳出当前循环体,从而中断当前循环。在实际运用中,往往是在循环体中使用某一个条件来选择是否中断循环,即跳出当前循环,继而执行当前循环外的下一条语句。也就是说,当某个条件成立的时候,需要立即退出循环,不再运行循环中余下的代码,也不管循环控制变量的条件测试的结果如何。使用break语句,即可让程序能按照要求执行要执行的代码。! r/ B5 V" J  ^$ W7 @0 g1 D
2. continue语句
3 o1 r( \. W  ]. p  N7 w. w  Tcontinue语句是对 break语句的补充。 continue不是立即跳出循环体,而是当条件符合需要跳转的时候,跳过该次循环结束前的语句,回到循环开头的条件测试部分,重新开始执行循环。同理,在实际运用中,往往是在循环体中使用某一个条件来选择是否跳转循环。
8 _/ K5 Z/ q2 s5 K: N0 }课内任务:有三个数字:1、2、3,能组成互不相同且无重复数字的两位数,各是多少?
! z% t3 Z/ x2 g( G) I' e; x+ n- ~) j/ e1 E' `

9 ?/ t9 v( ?' o/ ~" K* Z+ [) W. N+ C) _2 u9 y( x

. ^, r3 Z& C# K7 N  p/ A4 T. J9 J* D6 ~, u' i
4 M' j* M6 `! _0 L
0 N7 D& s: o) J* \# K0 Z

9 }9 O9 I& L6 b0 @, D- U# A, Y8 i& E
  1. for i in range(1,4):
    ! a+ i, L/ y: I* J, q: H
  2.     for j in range(1,4):
    2 g) j, g, b* C* O7 [+ `
  3.         if i != j:5 X5 [$ @/ J9 K. n2 y1 u3 }
  4.             print (i*10+j)
复制代码

) f/ M$ Y/ L& [3 U4 k
5 g+ c5 A  t* c2 m
楼主热帖




上一篇:第十九讲 运用循环结构描述问题求解过程(上)
下一篇:第四章 学业评价
+1
557°C
沙发哦 ^ ^ 马上

帖子地址: 

教书育人!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

百度一下 百度二下 百度三下 开门大吉

QQ|Archiver|手机版|小黑屋|山东省高中信息技术学业水平考试试题网 ( 鲁ICP备16049757号 )|网站地图

GMT+8, 2020-10-2 01:18 , Processed in 0.292607 second(s), 40 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表