计算机算法设计题选.docVIP

  • 31
  • 0
  • 约4.03万字
  • 约 37页
  • 2018-06-09 发布于河南
  • 举报
计算机算法设计题选

算法设计题选 (一)、算法设计: 一、筛选法 1:求1—100间的所有素数。 分析:用筛选法,先把2—100的数存到一个数组中,然后先把2的所有倍数删除掉(即让此数变为0),再删3的倍数,继续往上就是5的倍数,7的倍数……,最后,剩下的数(即数组中不为0的数)就是素数。 Var n:array[2..100] of integer; I,j,k:integer; Begin For I:=2 to 100 do n[I]:=I; I:=2; Repeat J:=1; Repeat J:=j+1; K:=I*j; if n[k]0 then N[k]:=0; Until (j+1)*i100; Repeat i:=i+1; until (n[i]0) or (i50); Until i50; for i:=2 to 100 do if n[i]0 then write(n[i]:4); end. 另外,该题也可利用集合来做,同样用筛选法: var ss:set of 2..100; i,j,k:integer; begin ss:=[2..100]; for i:=2 to 50 do begin j:=1; repeat j:=j+1; k:=i*j; if k in ss then ss:=ss-[k]; until k+i100; end; for i:=2 to 100 do if i in ss then write(i:3); end. 集合SS用来存放数 把SS中2至50的倍数全部删除 2:不相同的余数问题,即“秦王暗点兵”或“韩信点兵”: 有一楼房的楼梯级数很奇特,一步跨二级多一级,一步跨三级多二级,如果分用四、五、六、七去除级数分别余三、三、五、五。问这楼房共有多少级阶梯?(已知不超过400级)。 分析:已知级数不超过400级,我们可仿照求素数的方法,把1—400存进一个数组中,然后这些数用2、3、4、5、6、7分别去除,如果余数分别不为1、2、3、3、5、5就删除它,最后,最小的一个没有被删除的数就是解。 Var n:array[1..400] of integer; I,j,k:integer; Const a:array[1..6] of integer=(2,3,4,5,6,7); b:array[1..6] of integer=(1,2,3,3,5,5); Begin For I:=1 to 400 do n[I]:=I; for i:=1 to 6 do begin for k:=1 to 400 do begin if n[k]0 then begin if k mod a[i]b[i] then begin n[k]:=0; end; end; end; end; i:=0; repeat i:=i+1; until n[i]0; write(n[i]:4); end. 除数 余数 找最小的一个没有被删除的数 分析:用上述方法由于要删除的数非常多,因此速度较慢,我们可以反过来想,把满足余数条件的数加上记号,最后,最小的一个加上了六个记号的数就是答案。 Var n:array[1..400] of integer; I,j,k:integer; const a:array[1..6] of integer=(2,3,4,5,6,7); b:array[1..6] of integer=(1,2,3,3,5,5); Begin For I:=1 to 400 do n[I]:=0; for k:=1 to 400 do begin for i:=1 to 6 do begin if k mod a[i]=b[i] then n[k]:=n[k]+1; end; end; i:=0; repeat i:=i+1; until n[i]=6; write(i:4); end. 这样,速度要快很多。大家思考一下下题:《孙子算法》有题:今

文档评论(0)

1亿VIP精品文档

相关文档