排列的生成:(1..n)procedure solve(dep:integer);vari:integer;

题目

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

procedure solve(dep:integer);

var

i:integer;


相似考题

2.本题中,用表格表现某个月的月历,其中标题是从Sunday到Saturday,表格中的各项是可以修改的。 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; public class java2 ( public static void main(String[]args) { try{ UIManager.setLookAndFeel(UIManager.getSys- temLookAndFeelClassName): } catch(Exception e) JFrame. frame=new CalendarTableFrame; frame.setDefaultCloseOperation(JFrame.EXIT_ oN CLOSE); frame.show; } } clasgCalendarTableFrame. extends JFrame { private static final int WIDTH=500; private static final int HEIGHT=150: private cells= { {null,null,null,new Integer(1),new Integer (2),new Integer(3),new Integer(4)), {new Integer(5),new Integer(6),new Integer (7).new Integer(8),new Integer(9),new Integer (10),new Integer(11)), {new Integer(12),new Integer(13),new Integer (14),new Integer(15),new Integer(16),new Integer (17),new Integer(18)), {new Integer(19),new Integer(20),new Integer (21),new Integer(22),new Integer(23),new Integer (24),new Integer(25)), {new Integer(26),new Integer(27),new Integer (28),new Integer(29),new Integer(30),new Integer (31),null} }; private String[]columnNames={ "Sunday","Monday","Tuesday","Wednesday", "Thursday","Friday","Saturday" }; public CalendarTableFrame{ setTitle("java2"); setSize(WIDTH,HEIGHT); JTable table=new ; getContentPane.add(new JScrollPane(table), BorderLayout.CENTER); } }

更多“排列的生成:(1..n)procedure solve(dep:integer);vari:integer;”相关问题
  • 第1题:

    要想在过程Proc调用后返回形参x和y的变化结果,下列定义语句中正确的是______。

    A.Sub Proc(x as Integer, y as Integer)

    B.Sub Proc(By Val x as Integer, y as Integer)

    C.Sub Proc(x as Integer, By Val y as Integer)

    D.Sub Proc(By Val x as Integer, By Val y as Integer)


    正确答案:A
    解析:过程定义时,如果形式参数被声明为传值(ByVal项),则过程调用只是相应位置实参的值“单向”传送给形参处理,而被调用过程内部对形参的任何操作引起的形参值的变化均不会反馈、影响实参的值。由于这个过程中数据的传递只是单向性,故称为“传值调用”的“单向”作用形式。反之,如果形式参数被声明为传址(ByRef项),则过程调用是将相应位置实参的地址传送给形参处理,而被调用过程内部对形参的任何操作引起的形参值的变化又会反向影响实参的值。在这个过程中,数据的传递具有双向性,故称为“传址调用”的“双向”作用形式。在过程定义时,如果未做参数说明,则默认为传址调用。本题要在过程Proc调用后返回形参x和y的变化结果,所以本题的参数x和y的说明方式都需要采用传址(ByRef项),所有B、C、D选项不符合要求,由于未做参数说明,则默认为传址调用,则A选项正确。

  • 第2题:

    最小生成树

    A.Prim算法:

    procedure prim(v0:integer);

    var

    lowcost,closest:array[1..maxn] of integer;

    i,j,k,min:integer;


    正确答案:

     

    begin
    for i:=1 to n do begin
    lowcost[i]:=cost[v0,i];
    closest[i]:=v0;
    end;
    for i:=1 to n-1 do begin
    {寻找离生成树最近的未加入顶点k}
    min:=maxlongint;
    for j:=1 to n do
    if (lowcost[j]<min) and (lowcost[j]<>0) then begin
    min:=lowcost[j];
    k:=j;
    end;
    lowcost[k]:=0; {将顶点k加入生成树}
    {生成树中增加一条新的边k到closest[k]}
    {修正各点的lowcost和closest值}
    for j:=1 to n do
    if cost[k,j]<lwocost[j] then begin
    lowcost[j]:=cost[k,j];
    closest[j]:=k;
    end;
    end;
    end;{prim}

  • 第3题:

    最短路径

    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}

  • 第4题:

    无向图的连通分量

    A.深度优先

    procedure dfs ( now,color: integer);


    正确答案:

     

    begin
    for i:=1 to n do
    if a[now,i] and c[i]=0 then begin {对结点I染色}
    c[i]:=color;
    dfs(I,color);
    end;
    end;

  • 第5题:

    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;

  • 第6题:

    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;

  • 第7题:

    高精度数的定义:

    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}

  • 第8题:

    高精度乘以低精度

    procedure multiply(a:hp;b:longint;var c:hp);

    var i,len:integer;


    正确答案:

     

    begin
    fillchar(c,sizeof(c),0);
    len:=a[0];
    for i:=1 to len do begin
    inc(c[i],a[i]*b);
    inc(c[i+1],(a[i]*b) div 10);
    c[i]:=c[i] mod 10;
    end;
    inc(len);
    while (c[len]>=10) do begin {处理最高位的进位}
    c[len+1]:=c[len] div 10;
    c[len]:=c[len] mod 10;
    inc(len);
    end;
    while (len>1) and (c[len]=0) do dec(len); {若不需进位则调整len}
    c[0]:=len;
    end;{multiply}

  • 第9题:

    高精度除以高精度

    procedure high_devide(a,b:hp; var c,d:hp);

    var

    i,len:integer;


    正确答案:

     

    begin
    fillchar(c,sizeof(c),0);
    fillchar(d,sizeof(d),0);
    len:=a[0];d[0]:=1;
    for i:=len downto 1 do begin
    multiply(d,10,d);
    d[1]:=a[i];
    while(compare(d,b)>=0) do {即d>=b}
    begin
    Subtract(d,b,d);
    inc(c[i]);
    end;
    end;
    while(len>1)and(c.s[len]=0) do dec(len);
    c.len:=len;
    end;

  • 第10题:

    组合的生成(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;

  • 第11题:

    单链表的插入操作

    procedure insert(L:linklist; I:integer; x:datatype);

    var p,q:pointer;


    正确答案:

     

    begin
    p:=loc(L,I);
    new(q);
    q^.data:=x;
    q^.next:=p^.next;
    p^.next:=q;
    inc(L.len);
    end;

  • 第12题:

    要想在过程Proc调用后返回形参x和Y的变化结果,下列定义语句中正确的是( )。【考点5过程调用与参数传递】

    A.Sub Proc(x as Integer,Y as Integer)

    B.Sub Proc(ByVal x as Integer,Y as Integer)

    C.Sub Proc(x as Integer,ByVal Y as Integer)

    D.Sub Proc(ByVal x as Integer,ByVal Y as Integer)


    正确答案:A
    本题考查VBA中参数传递的知识。在VBA的过程调用时,参数有两种传递方式:传址传递和传值传递。如果在过程声明时形参用ByVal声明,说明此参数为传值调用;若用ByRef声明,说明此参数为传址调用:若没有说明传递类型,则默认为传址传递,即形参的结果会传递给实参。

  • 第13题:

    如果Add函数的调用代码为:func main() {var a Integer = 1var b Integer = 2var i interface{} = asum := i.(Integer).Add(b)fmt.Println(sum)}则Add函数定义正确的是()

    A.type Integer intfunc (a Integer) Add(b Integer) Integer { return a + b}

    B.type Integer intfunc (a Integer) Add(b *Integer) Integer { return a + *b}

    C.type Integer intfunc (a *Integer) Add(b Integer) Integer { return *a + b}

    D.type Integer intfunc (a *Integer) Add(b *Integer) Integer { return *a + *b}


    参考答案:A

  • 第14题:

    B.Kruskal算法:(贪心)

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

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

    var i:integer;


    正确答案:

     

    B.Kruskal算法:(贪心)

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

  • 第15题:

    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;

  • 第16题:

    四、排序算法

    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}

  • 第17题:

    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;

  • 第18题:

    F. 归并排序

    {a为序列表,tmp为辅助数组}

    procedure merge(var a:listtype; p,q,r:integer);

    {将已排序好的子序列a[p..q]与a[q+1..r]合并为有序的tmp[p..r]}

    var I,j,t:integer;

    tmp:listtype;


    正确答案:

     

    begin
    t:=p;i:=p;j:=q+1;{t为tmp指针,I,j分别为左右子序列的指针}
    while (t<=r) do begin
    if (i<=q){左序列有剩余} and ((j>r) or (a[i]<=a[j])) {满足取左边序列当前元素的要求}
    then begin
    tmp[t]:=a[i]; inc(i);
    end
    else begin
    tmp[t]:=a[j];inc(j);
    end;
    inc(t);
    end;
    for i:=p to r do a[i]:=tmp[i];
    end;{merge}

    procedure merge_sort(var a:listtype; p,r: integer); {合并排序a[p..r]}
    var q:integer;
    begin
    if p<>r then begin
    q:=(p+r-1) div 2;
    merge_sort (a,p,q);
    merge_sort (a,q+1,r);
    merge (a,p,q,r);
    end;
    end;
    {main}
    begin
    merge_sort(a,1,n);
    end.

  • 第19题:

    高精度减法

    procedure substract(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]<0 then begin inc(c[i],10);dec(c[i+1]); end;
    while (len>1) and (c[len]=0) do dec(len);
    c[0]:=len;
    end;

  • 第20题:

    高精度乘以高精度

    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;

  • 第21题:

    已知前序中序求后序

    procedure Solve(pre,mid:string);

    var i:integer;


    正确答案:

     

    begin
    if (pre='''') or (mid='''') then exit;
    i:=pos(pre[1],mid);
    solve(copy(pre,2,i),copy(mid,1,i-1));
    solve(copy(pre,i+1,length(pre)-i),copy(mid,i+1,length(mid)-i));
    post:=post+pre[1]; {加上根,递归结束后post即为后序遍历}
    end;

  • 第22题:

    链表的定位函数

    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;

  • 第23题:

    用整数10创建一个Integer类的对象,下列各语句中能完成此功能的是( )。

    A.Integer i=new Integer(10);

    B.Integer i=10;

    C.int i=10;

    D.Integer i=Integer(10);


    正确答案:A
    解析:Integer类是int类型的包装类,其创建和使用方法和一般的类相似,因此答案为A。