回 帖 发 新 帖 刷新版面

主题:小学生初学pascal,请高手帮帮忙

集合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个回复)

沙发

这个有点类似于宽搜的一点点思想

板凳

BFS硬搜貌似有点不现实 - - 
估计因该是有数学方法的吧 - -

3 楼

谢谢大家的帮助,但你们说的深搜我不懂啊,我这是在数组与字符串一章节中遇到的困难,是否不用你们说的方法可以解决啊,请指教啊,期待中......

4 楼

说明:如果没有学过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.

我来回复

您尚未登录,请登录后再回复。点此登录或注册