多重循环与枚举算法优秀课件.ppt
多重循环与枚举算法多重循环与枚举算法第1页,本讲稿共17页一、一、复习复习1.1.下面的程序段用于计算下面的程序段用于计算s=1*2+3*4+5*6+7*8+9*10s=1*2+3*4+5*6+7*8+9*10则在程序的划线处应填上(则在程序的划线处应填上()S=0S=0For k=1 to 10 step _For k=1 to 10 step _ s=s+k*(k+1)s=s+k*(k+1)Next kNext k(A)0 (B)1 (C)2 (D)k(A)0 (B)1 (C)2 (D)k第2页,本讲稿共17页2.2.在窗体上画一个名称为在窗体上画一个名称为command1command1的命令按钮,然的命令按钮,然后编写如下事件过程后编写如下事件过程:Private Sub Command1_Click()Private Sub Command1_Click()Dim n,m As Integer Dim n,m As Integer m=0 m=0 For n=1 to 20 For n=1 to 20 if n Mod 30 then m=m+n3 if n Mod 30 then m=m+n3Next nNext nText1.text=str(m)Text1.text=str(m)End SubEnd Sub程序运行后,如果单击命令按钮,则文本框程序运行后,如果单击命令按钮,则文本框Text1Text1中显示中显示的内容是的内容是(A)15 (B)18 (C)42 (D)24(A)15 (B)18 (C)42 (D)24第3页,本讲稿共17页3.说出下面程序运行后x的数值是()x=1Do While (x mod 80)or(x mod 60)x=x+1Loop(A)(A)1(B)(B)2(C)(C)12(D)(D)24第4页,本讲稿共17页二、新课二、新课1.1.单据问题:单据问题:一张单据上有一个一张单据上有一个5 5位数的编号,其百位数和位数的编号,其百位数和十位数处已经变得模糊不清,如图所示。但是知道十位数处已经变得模糊不清,如图所示。但是知道这个这个5 5位数是位数是3737或或6767的倍数。现在要设计一个算法,的倍数。现在要设计一个算法,找出所有满足这些条件的找出所有满足这些条件的5 5位数,并统计这些位数,并统计这些5 5位数位数的个数。的个数。第5页,本讲稿共17页单据问题界面设计单据问题界面设计(程序预演程序预演)列表框控件list1按钮控件command1窗体form1第6页,本讲稿共17页第7页,本讲稿共17页单据问题代码单据问题代码Private Sub Command1_Click()Private Sub Command1_Click()Dim j,n,c As Integer Dim j,n,c As Integer c=0 c=0 List1.Clear List1.Clear For j=_ To _ For j=_ To _ _ _ If _ Then If _ Then List1.AddItem Str(n)List1.AddItem Str(n)c=c+1 c=c+1 End If End If Next j Next j List1.AddItem List1.AddItem 总计有总计有+Str(c)+Str(c)+个五位数个五位数 End SubEnd Sub第8页,本讲稿共17页单据问题代码单据问题代码Private Sub Command1_Click()Private Sub Command1_Click()Dim j,n,c As Integer Dim j,n,c As Integer c=0 c=0 List1.Clear List1.Clear For j=0 To 99 For j=0 To 99 n=25006+j*10 n=25006+j*10 If n Mod 37=0 Or n Mod 67=0 Then If n Mod 37=0 Or n Mod 67=0 Then List1.AddItem Str(n)List1.AddItem Str(n)c=c+1 c=c+1 End If End If Next j Next j List1.AddItem List1.AddItem 总计有总计有+Str(c)+Str(c)+个五位数个五位数 End SubEnd Sub第9页,本讲稿共17页课堂任务课堂任务n n完成单据问题的程序第10页,本讲稿共17页双重循环解决单据问题双重循环解决单据问题双重循环解决单据问题双重循环解决单据问题Private Sub Command1_Click()Private Sub Command1_Click()Dim i,j,n,c As Integer Dim i,j,n,c As Integer c=0 c=0 List1.Clear List1.Clear For i=0 to 9 For i=0 to 9 For j=0 To 9 For j=0 To 9 n=25006+i*100+j*10 n=25006+i*100+j*10 If n Mod 37=0 Or n Mod 67=0 Then If n Mod 37=0 Or n Mod 67=0 Then List1.AddItem Str(n)List1.AddItem Str(n)c=c+1 c=c+1 End If End If Next j Next j next i next i List1.AddItem List1.AddItem 总计有总计有+Str(c)+Str(c)+个五位数个五位数 End SubEnd Sub第11页,本讲稿共17页问题:下面程序运行结束后变量问题:下面程序运行结束后变量问题:下面程序运行结束后变量问题:下面程序运行结束后变量s s的值是多少?的值是多少?的值是多少?的值是多少?程序1S=0i=5For j=1 to iS=s+jNext j程序2S=0For i=1 to 5 For j=1 to i S=s+j Next jNext i第12页,本讲稿共17页2.包装问题包装问题 包装600个变形金刚,要求是:(1)包装的规格分别是:小盒(每合2个)、中盒(每合5个)、大盒(每合8个);(2)每种规格的合数都不能是0。设计一个算法,输出所有可能的包装方案,并输出包装方案的个数。第13页,本讲稿共17页第14页,本讲稿共17页变变形形金金刚刚包包装装问问题题代代码码Private Sub Command1_Click()Private Sub Command1_Click()Dim x,y,z,c As Integer Dim x,y,z,c As Integer c=0 c=0 List1.Clear List1.Clear For x=1 To 293 For x=1 To 293 For y=1 To 118 For y=1 To 118 For z=1 To 74 For z=1 To 74 If 2*x+5*y+8*z=600 Then If 2*x+5*y+8*z=600 Then List1.AddItem Str(x)+Str(y)+Str(z)List1.AddItem Str(x)+Str(y)+Str(z)c=c+1 c=c+1 End If End If Next z Next z Next y Next y Next x Next x Text1.Text=Str(c)Text1.Text=Str(c)End SubEnd Sub小知识:循环内嵌套循环的方式叫多重循环小知识:循环内嵌套循环的方式叫多重循环程序预演程序预演程序预演程序预演第15页,本讲稿共17页上机练习:上机练习:通过上机的方式完成本课件中复习题中的第一、第三两题掌握msgbox()过程和str()函数的使用第16页,本讲稿共17页完成包装问题操作速度快的同学完成单据问题。第17页,本讲稿共17页