pascal编程题

请教一题:按递增顺序产生序列M中最小的80个数。M定义如下:数1属于M;若x属于M,则y=2x+1,z=3x+1也属于M,并求:(★★★★)(1)该序列第50个元素之值;... 请教一题:
按递增顺序产生序列M中最小的80个数。M定义如下:数1属于M;若x属于M,则y=2x+1,z=3x+1也属于M,并求: (★★★★)
(1) 该序列第50个元素之值;(2)该序列前50个元素之和。
(答案:(1)172; (2)3853)
这个答案对吗?
我做的50个元素是163,(并且是不考虑重复数字的情况)
展开
 我来答
peter987662
2013-08-18 · TA获得超过1330个赞
知道小有建树答主
回答量:1117
采纳率:0%
帮助的人:1279万
展开全部
program e;
  var
  i,j,k,t,p,n:longint;
  a:array[1..100] of longint;
  begin
  writeln;
  p:=1; a[p]:=1; n:=1;
  while p<50 do
  begin
  a[n+1]:=2*a[p]+1;
  a[n+2]:=3*a[p]+1;
  n:=n+2;
  for i:=1 to n-1 do
   for j:=1 to n-i do
   if a[j]>a[j+1] then
   begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t; end;
  p:=p+1;
  end;
  writeln(a[p]:8);
  end.

答案对的

追问
以前看过一样的,是错误的!没有考虑重复数!运行结果就是163!
追答

不好意思看错题啦,做下来是163,代码如下(为快速得出答案,用的vb.net)

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ListBox1.Items.Clear()
        Dim i As Integer = 0
        Dim j As Integer = 1
        Dim ss As Collection = New Collection
        ss.Add(1)
        ListBox1.Items.Add(1)
        Do
            j += 1
            Dim s As Integer
            For Each s In ss
                If (j = 2 * s + 1) Or (j = 3 * s + 1) Then
                    i += 1
                    ListBox1.Items.Add(j)
                    ss.Add(j)
                End If
            Next
        Loop Until i = 50
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式