主题:小学生初学pascal,请高手帮帮忙
liziyang96
[专家分:0] 发布于 2008-08-31 11:40:00
集合M的元素的定义如下:
(1) 数1属于M;
(2) 若X属于M, 则A=2X+1, B=3X+1, C=5X+1, 也属于M;
(3) 再没有别的数属于M。(M={1,3,4,6,7,9,10,13,15,16...,如果M中的元素是按递增次序排列的,求出其中的第201,202和203个元素。
请给出程序代码,(或思路)好的给加分![em39][em39]
回复列表 (共4个回复)
沙发
无所不能 [专家分:270] 发布于 2008-09-07 14:40:00
这个有点类似于宽搜的一点点思想
板凳
游侠UFO [专家分:1200] 发布于 2008-09-09 12:00:00
BFS硬搜貌似有点不现实 - -
估计因该是有数学方法的吧 - -
3 楼
liziyang96 [专家分:0] 发布于 2008-09-12 13:54:00
谢谢大家的帮助,但你们说的深搜我不懂啊,我这是在数组与字符串一章节中遇到的困难,是否不用你们说的方法可以解决啊,请指教啊,期待中......
4 楼
小田甜 [专家分:3910] 发布于 2008-09-14 19:01:00
说明:如果没有学过integer, byte, shortint, longint, word的区别那么都写成integer
或许可以这样:
开一个数组a:array [1..203] of longint;
a[1]:=1;
然后用3个指针p, q, r(是byte类型的不是^longint类型的)指向1(p:=1; q:=1; r:=1;)
挨个算。
算了还是贴代码好了。
var
a:array [1..203] of longint;
p,q,r,i:byte;
n1,n2,n3:longint;
begin
a[1]:=1;
p:=1; q:=1; r:=1;
for i:=2 to 203 do begin
repeat n1:=a[p]*2+1; if n1<=a[i-1] then inc(p); until n1>a[i-1];
repeat n2:=a[q]*3+1; if n2<=a[i-1] then inc(q); until n2>a[i-1];
repeat n3:=a[r]*5+1; if n3<=a[i-1] then inc(r); until n3>a[i-1];
if (n1<n2) and (n1<n3) then begin
a[i]:=n1; p:=p+1;
end else if (n2<n3) then begin
a[i]:=n2; q:=q+1;
end else begin
a[i]:=n3; r:=r+1;
end;
end;
for i:=1 to 203 do begin
write(a[i]:6);
if i mod 10=0 then writeln;
end;
readln;
end.
我来回复