更多“最小生成树A.Prim算法:procedure prim(v0:integer);varlowcost,closest:array[1..maxn] of integer;i,j,k,min:integer;”相关问题
  • 第1题:

    当Form1_Click事件发生时,窗体上显示的第三行是( )。 Option Base 1 Private Sub Form_Click() Dim i As Integer,j As Integer Dim k As Integer,a(5,5)As Integer For i=1 To 5 k=1 For j=1 To 5 If i<=j Then a(i,j)=k k=k+1 Else a(i,j)=1 End If Next j Next i For i=1 To 5 For j=1 To 5 Print a(i,j); Next j Print Next i End Sub

    A.1 2 3 4 5

    B.1 1 2 3 4

    C.1 1 1 2 3

    D.1 1 1 1 2


    正确答案:C
    解析:本题首先定义了一个5行5列的数组,然后通过一个二重For循环给它的每个元素赋初值,赋值规律是左上右下对角线下面的元素值为1,该对角线上元素的值为1,该对角线上面的元素值在前一元素值的基础上增加1。接着通过一个两层For循环按行输出二维数组a,故输出的第三行为“11123”。

  • 第2题:

    阅读下列程序: Private Sub Command1_Click( ) Dim i As Integer,k As Integer k=2 For i=1 To 3 Print H(k); Next i End Sub Function H(j As Integer) a=0 Static b a=a+1 b=b+1 H=a*b+j End Function 程序运行后,单击命令按钮输出结果是

    A.234

    B.345

    C.567

    D.356


    正确答案:B
    解析:被调过程是一个函数过程,它有一个形式参数j,在被调过程声明中,定义了一个参数a,初值为0,一个静态变量b。语句a=a+1和b=b+1分别使用a和b各增加1,然后返回H的值,因为b是静态变量,所以每次调用同一个参数k时,b会保留前次的数值,使输出的结果变化,否则每次输出的结果都是一样的。根据分析,第一次调用时a=1,b=1,H=3;第二次调用:a=1,b=2,H=4;第三次调用:a=1,b=3=,H=5。所以最后的输出结果是345。

  • 第3题:

    23 有如下程序段,该程序段循环的次数是______。 Dim i As Integer Dim j As Integer Dim k As Integer k=0 For i = 0 To 10 Step 3 For j = 1 To 5 If j > 3 Then k = k + 4: Exit For k=k+1 Print k Next j If i > 8 Then Exit For Next i

    A.9

    B.10

    C.11

    D.12


    正确答案:D

  • 第4题:

    B.Kruskal算法:(贪心)

    按权值递增顺序删去图中的边,若不形成回路则将此边加入最小生成树。

    function find(v:integer):integer; {返回顶点v所在的集合}

    var i:integer;


    正确答案:

     

    B.Kruskal算法:(贪心)

    按权值递增顺序删去图中的边,若不形成回路则将此边加入最小生成树。
    function find(v:integer):integer; {返回顶点v所在的集合}
    var i:integer;

  • 第5题:

    C. Dijkstra 算法:

    var

    a:array[1..maxn,1..maxn] of integer;

    b,pre:array[1..maxn] of integer; {pre[i]指最短路径上I的前驱结点}

    mark:array[1..maxn] of boolean;

    procedure dijkstra(v0:integer);


    正确答案:

     

    begin
    fillchar(mark,sizeof(mark),false);
    for i:=1 to n do begin
    d[i]:=a[v0,i];
    if d[i]<>0 then pre[i]:=v0 else pre[i]:=0;
    end;
    mark[v0]:=true;
    repeat {每循环一次加入一个离1集合最近的结点并调整其他结点的参数}
    min:=maxint; u:=0; {u记录离1集合最近的结点}
    for i:=1 to n do
    if (not mark[i]) and (d[i]<min) then begin
    u:=i; min:=d[i];
    end;
    if u<>0 then begin
    mark[u]:=true;
    for i:=1 to n do
    if (not mark[i]) and (a[u,i]+d[u]<d[i]) then begin
    d[i]:=a[u,i]+d[u];
    pre[i]:=u;
    end;
    end;
    until u=0;
    end;

  • 第6题:

    C.选择排序:

    procedure sort;

    var i,j,k:integer;


    正确答案:

     

    begin
    for i:=1 to n-1 do
    for j:=i+1 to n do
    if a[i]>a[j] then swap(a[i],a[j]);
    end;

  • 第7题:

    E.堆排序:

    procedure sift(i,m:integer);{调整以i为根的子树成为堆,m为结点总数}

    var k:integer;


    正确答案:

     

    begin
    a[0]:=a[i]; k:=2*i;{在完全二叉树中结点i的左孩子为2*i,右孩子为2*i+1}
    while k<=m do begin
    if (k<m) and (a[k]<a[k+1]) then inc(k);{找出a[k]与a[k+1]中较大值}
    if a[0]<a[k] then begin a[i]:=a[k];i:=k;k:=2*i; end
    else k:=m+1;
    end;
    a[i]:=a[0]; {将根放在合适的位置}
    end;

    procedure heapsort;
    var
    j:integer;
    begin
    for j:=n div 2 downto 1 do sift(j,n);
    for j:=n downto 2 do begin
    swap(a[1],a[j]);
    sift(1,j-1);
    end;
    end;

  • 第8题:

    高精度乘以高精度

    procedure high_multiply(a,b:hp; var c:hp}

    var i,j,len:integer;


    正确答案:

     

    begin
    fillchar(c,sizeof(c),0);
    for i:=1 to a[0] do
    for j:=1 to b[0] do begin
    inc(c[i+j-1],a[i]*b[j]);
    inc(c[i+j],c[i+j-1] div 10);
    c[i+j-1]:=c[i+j-1] mod 10;
    end;
    len:=a[0]+b[0]+1;
    while (len>1) and (c[len]=0) do dec(len);
    c[0]:=len;
    end;

  • 第9题:

    组合的生成(1..n中选取k个数的所有方案)

    procedure solve(dep,pre:integer);

    var

    i:integer;


    正确答案:

     

    begin
    if dep=k+1 then begin writeln(s);exit; end;
    for i:=1 to n do
    if (not used[i]) and (i>pre) then begin
    s:=s+chr(i+ord(''0''));used[i]:=true;
    solve(dep+1,i);
    s:=copy(s,1,length(s)-1); used[i]:=false;
    end;
    end;

  • 第10题:

    当Form_Click;事件发生时,窗体上显示的第三行是 ______。 Private Sub Form_Click() Dim i As Integer, j As Integer, k As Integer Dim x(5, 5) As Integer For i = 1 To 5 k = 1 For j = 1 To 5 If i <= j Then x(i, j) = k + 1 k=k+2 Else x(i, j) = k + 1 End If Next j Next i For i = 1 To 5 For j = 1 To 5 Print x(i, j) Next j Print Next i End Sub

    A.22135

    B.21357

    C.22213

    D.13579


    正确答案:A
    解析:程序首先通过一个双重循环二维数组x的各个元素赋值,通过计算不难得出二维数组各行的值:第一行:13579第二行:21357第三行:22135第四行:22213第五行:22221第三行的值为22135,因此本题选A。

  • 第11题:

    在窗体上画一个按钮,然后编写如下的事件代码。在按钮上单击,输出为( )。 Private Function fun(x As Integer,y As Integer) Static m As Integer Static i As Integer i=i+2 i=i+m+1 m=i+x+y fun=m End Function Private Sub Command1_Click() Dim j As Integer,m As Integer,k As Integer j=4:m=1 k=fun(j,m) Print k; k=fun (j,m) Print k End Sub

    A.8 18

    B.7 17

    C.7 19

    D.8 19


    正确答案:D
    解析:当发生Command1的单击事件时,定义了两个变量j和m,并依次赋值为4和1,然后调用fun函数,把i和m按地址传递给x和y,进入fun函数执行。在fun函数中定义了两个静态变量m和i,执行三条赋值语句后i的值为3,m的值为8,通过给函数名赋值把8作为函数值返回并赋值给k,输出k的值为8;再一次调用函数fun,把j和m依次按地址传给x和y,进入fun函数执行,注意,由于m和i是静态变量,此时的值不再是0,而是上一次退出时的值为3和8。执行三条赋值语句后i的值为14,m的值为19,通过给函数名赋值,把19作为函数值返回并赋值给k,输出k的值为19。

  • 第12题:

    下列程序段的执行结果为 ______。 Dim m(3,3)As Integer Dim i As Integer Dim j As Integer Dim K As Integer For i=1 To 3 m(i,i)=i Next For i=0 To 3 For j=0 To 3 x=x+m(i,j) Next Next Print x

    A.3

    B.4

    C.5

    D.6


    正确答案:D
    解析:通过第一个以i为循环变量的循环,令a(1,1)=1,a(2,2)=2,a(3,3)=3。然后通过双重循环,求数组a中所有元素的和并将结果赋值给x,由于在数组a中除了a(1,1)、a(2,2)和a(3,3)外其他元素都为0,所以 x=1+2+3=6。

  • 第13题:

    在窗体上画一个命令按钮,然后编写如下事件过程: Private Sub Commandl_Click() Dim m As Integer, n As Integer, p As Integer m=3: n=5: p=0 Call Y(m, n, p) Print Str(p) End Sub Sub Y(ByVal i As Integer, ByVal j As Integer, k As Integer) k=i+j End Sub 程序运行后,如果单击命令按钮,则在窗体上显示的内容是( )

    A.4

    B.6

    C.8

    D.10


    正确答案:C
    解析:此程序考查了函数的调用,函数过程有3个形参,功能是将第一个和第二个形参的和赋给第三个形参,其中前两个形参是按值传递,不会影响实参的数值,即在调用函数过程的过程中,不变化实参的数值;而第三个形参是按址传递,传递的是实参的地址,这样实参会随着过程中形参的变化而变化,即改变实参的数值。在主调过程中定义了三个整型变量,分别赋值3、5、0,调用过程后 m,n的数值仍然是3、5,而p的值不再是0而变为8即m、n的和,这也是被调函数的作用。

  • 第14题:

    在窗体上画一个名称为CoilTlilandl的命令按钮,然后编写如下事件过程: Private Sub command1 Click() Dim m As Integer, i As Integer, x(3)As Integer For i=0 To 3:x(i)=i:Next i For i = 1 To 2: Call sub1(x,i):Next i For i = 0 To 3: Print x(i);: Next i End Sub Private Sub sub1(a()As Integer,k As Integer) Dim i As Integer Do a(k)=a(k)+a(k+1) j = j + 1 Loop While j < 2 End Sub 程序运行后,单击命令按钮,则窗体上显示的内容是

    A.0 3 7 5

    B.0 1 2 3

    C.3 2 4 5

    D.0 5 8 3


    正确答案:D
    解析:数组也可以作为函数或者过程的参数,使用方法是直接使用数组名加括号,也可以直接使用数组名,采用sub1(x)和sub1(x())的调用形式都正确。变量i的作用只控制循环次数。

  • 第15题:

    阅读下列程序。 Private Sub Command1_Click() Dim i As Integer,k As Integer k=2 For i=1 To 3 Print Fun(k); Next End Sub Function Fun(j As Integer) Static b a=0 a=a + 1 b=b + 1 Fun=a*b+j End Function 程序运行后,单击命令按钮输出结果是

    A.234

    B.345

    C.567

    D.356


    正确答案:B
    解析:在此题中,被调过程是一个函数过程,它有一个形式参数j,在被调过程声明中,定义了一个参数a,初值为0,一个静态变量b。语句a=a+1和b=b+1分别使a和b各增加1,然后返回H的值,因为b是静态变量,所以每次调用同一个参数k时,b会保留前次的数值,使输出结果变化,否则每次输出的结果都将是一样的。根据分析,第一次调用时a=1, b=1,Fun=3;第二次调用:a=1,b=2,Fun=4;第三次调用:a=1,b=3,Fun=5。所以最后的输出结果是345。

  • 第16题:

    最短路径

    A.标号法求解单源点最短路径:

    var

    a:array[1..maxn,1..maxn] of integer;

    b:array[1..maxn] of integer; {b[i]指顶点i到源点的最短路径}

    mark:array[1..maxn] of boolean;

    procedure bhf;

    var

    best,best_j:integer;


    正确答案:

     

    begin
    fillchar(mark,sizeof(mark),false);
    mark[1]:=true; b[1]:=0;{1为源点}
    repeat
    best:=0;
    for i:=1 to n do
    If mark[i] then {对每一个已计算出最短路径的点}
    for j:=1 to n do
    if (not mark[j]) and (a[i,j]>0) then
    if (best=0) or (b[i]+a[i,j]<best) then begin
    best:=b[i]+a[i,j]; best_j:=j;
    end;
    if best>0 then begin
    b[best_j]:=best;mark[best_j]:=true;
    end;
    until best=0;
    end;{bhf}

  • 第17题:

    四、排序算法

    A.快速排序:

    procedure qsort(l,r:integer);

    var i,j,mid:integer;


    正确答案:

     

    begin
    i:=l;j:=r; mid:=a[(l+r) div 2]; {将当前序列在中间位置的数定义为中间数}
    repeat
    while a[i]<mid do inc(i); {在左半部分寻找比中间数大的数}
    while a[j]>mid do dec(j);{在右半部分寻找比中间数小的数}
    if i<=j then begin {若找到一组与排序目标不一致的数对则交换它们}
    swap(a[i],a[j]);
    inc(i);dec(j); {继续找}
    end;
    until i>j;
    if l<j then qsort(l,j); {若未到两个数的边界,则递归搜索左右区间}
    if i<r then qsort(i,r);
    end;{sort}

  • 第18题:

    D. 冒泡排序

    procedure bubble_sort;

    var i,j,k:integer;


    正确答案:

     

    begin
    for i:=1 to n-1 do
    for j:=n downto i+1 do
    if a[j]<a[j-1] then swap( a[j],a[j-1]); {每次比较相邻元素的关系}
    end;

  • 第19题:

    高精度数的定义:

    type

    hp=array[1..maxlen] of integer;

    1.高精度加法

    procedure plus ( a,b:hp; var c:hp);

    var i,len:integer;


    正确答案:

     

    begin
    fillchar(c,sizeof(c),0);
    if a[0]>b[0] then len:=a[0] else len:=b[0];
    for i:=1 to len do begin
    inc(c[i],a[i]+b[i]);
    if c[i]>10 then begin dec(c[i],10); inc(c[i+1]); end; {进位}
    end;
    if c[len+1]>0 then inc(len);
    c[0]:=len;
    end;{plus}

  • 第20题:

    排列的生成:(1..n)

    procedure solve(dep:integer);

    var

    i:integer;


    正确答案:

     

    begin
    if dep=n+1 then begin writeln(s);exit; end;
    for i:=1 to n do
    if not used[i] then begin
    s:=s+chr(i+ord(''0''));used[i]:=true;
    solve(dep+1);
    s:=copy(s,1,length(s)-1); used[i]:=false;
    end;
    end;

  • 第21题:

    链表的定位函数

    loc(I:integer):pointer; {寻找链表中的第I个结点的指针}

    procedure loc(L:linklist; I:integer):pointer;

    var p:pointer;

    j:integer;


    正确答案:

     

    begin
    p:=L.head; j:=0;
    if (I>=1) and (I<=L.len) then
    while j<I do begin p:=p^.next; inc(j); end;
    loc:=p;
    end;

  • 第22题:

    下面程序运行后的结果是( )。 Private Sub Form_Click() Dim s As Integer,k As Integer,i As Integer,n As Integer s=1 fori=1 to 3 forj=i to 3 for k=j to istep-1 s=s*k nextk,J,i print s End Sub

    A.6

    B.72

    C.144

    D.432


    正确答案:D

  • 第23题:

    当发生Form_Click事件时,窗体上显示的第三行是( )。 Option Base 1 Private Sub Form_Click() Dim i As Integer,j As Integer,k As Integer Dim a(5,5)As Integer For i=1 To 5 k=1 For i=1 To 5 If(i<=j)Then a(i,j)=k k=k+2 Else a(i,j)=k+1 End If Next j Next i For i=1 To 5 For j=1 To 5 Print a(i,j); Next j Print Next i End Sub

    A.1 3 5 7 9

    B.2 1 3 5 7

    C.2 2 2 1 3

    D.2 2 1 3 5


    正确答案:D
    解析:本题首先通过一个两层循环给5行5列的二维数组a的各个元素赋值,通过计算,不难得出二维数组各行的值。第一行的值为:13579:第二行的值为:21357;第三行的值为:22135;第四行的值为:22213;第五行的值为:22221。然后再通过一个双层循环按行输出该数组,所以输出的第三行为:22135。