估算下列程序段所代表算法的时间复杂度。 程序段: t=1;m=0; for(k=1; k<=; k++) { t=t*2; for(j=t; j<=n; j++) m++; }

题目

估算下列程序段所代表算法的时间复杂度。 程序段: t=1;m=0; for(k=1; k<=; k++) { t=t*2; for(j=t; j<=n; j++) m++; }


相似考题
更多“估算下列程序段所代表算法的时间复杂度。 程序段: t=1;m=0; for(k=1; k<=; k++) { t=t*2; for(j=t; j<=n; j++) m++; }”相关问题
  • 第1题:

    阅读下列程序说明和C代码,把应填入其中n处的字句写在答卷的对应栏内。

    【说明】

    程序利用选择排序算法对数组a中的N个整数按照从小到大的顺序排列,并将排序结果显示出来。

    【程序】

    define N 10

    main()

    {

    void (1);

    int i,a[N];

    for(i=0;i<10,i++) /*输入*/

    scanf(“%d”,&a[i]);

    (2);

    for(i=0;i<N,i++) /*输出*/

    printf(“%3d”,a[i]);

    }

    void selectSon(int x[],int n)

    {

    int i,j,k,t;

    for(int i=0; (3);i++)

    {

    k=i;

    for(j=i+1;j<n;j++)

    if (4) k=j;

    if (5)

    {t=x[i];x[i]=x[k];x[k] =t;}

    }

    }


    正确答案:(1)selectSort()
    (1)selectSort() 解析:main函数中对selectSort函数的调用在定义之前,所以要进行说明。

  • 第2题:

    有以下程序 main() { int a[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,j,k,t; for(i=0;<4:i++) for(j=0;j<3;j++) for(k=j+1;k<4;k++) if(a[j][i]>a[k][i]{t=a[j][i];a[j][i]=a[k][i]=a[k][i]=t;}/*按列排序*/ for(i=0;i<4;i++)printf("%d,",a[i][i]); } 程序运行后的输出结果是

    A.1,6,5,7,

    B.8,7,3,1,

    C.4,7,5,2,

    D.1,6,2,1,


    正确答案:A
    解析:本题利用多重for循环的嵌套来实现对二维数组元素的按列排序。利用最外层循环来实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列。最后输出对角线上的元素值。故本题答案为A)。

  • 第3题:

    有以下程序: include usingnamespacestd; intmain() { intnum[2][3],*p; intt,i,j,k=

    有以下程序: #include <iostream> using namespace std; int main() { int num[2][3],*p; int t,i,j,k=10; p=num[0]; for(i=0;i<2;i++) { for(j=0;j<3;j++) { k++; *p=k; for(t=2;t<*p;t++) { if(!(*p%t)) { j--; *p--; break; } *p++; } } cout<<*(p-1)<<end1; return 0; } 程序运行后的输出结果是( )。

    A.19

    B.11

    C.29

    D.23


    正确答案:C
    解析:本题考核数组与指针的关系。程序首先初始化指针p,让其指向二维数组num的首元素,即num[0][0]。程序中,第1个for循环是为二维数组的每行元素赋值而设置的循环,第2个for循环是为二维数组的每列元素赋值而设定的,第3个for循环是为判断数组元素是否是素数而设置的。在第3个for循环中,如果*p的值能被小于它的数整除(即不是素数),则执行“j--;*p--;”,然后跳出第3个for循环。j--的含义是让其前面的赋值语句重新赋值,而*p--的含义是使指针指向前一个单元。语句“*p++;”将指针移到下一个单元,在下一次循环时,k加1,并k赋给*p,看*p是否为素数,这样一直到满足条件为止,即数组num[2][3]中的数都为素数。最后数组num中各元素的值分别为大于10的素数,即分别为:11,13;17,19,23,29。程序最后要求输出*p的值,由于此时指针已指向数组num的最后一个元素,即num[1][2]。所以输出的值是29。

  • 第4题:

    以下程序的输出结果是 main() { int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++) for(j=i;j<=i;j++)t=t+b[i][b[j][j]]; printf(“%d\n”,t); }

    A.3

    B.4

    C.1

    D.9


    正确答案:B
    解析:本题中定义了一个二维数组b并初始化,定义了一个变量t并赋初值1。接着通过一个二重循环将若干个元素的值加到变量t中。循环的执行步骤是:外层循环变量i=0时,内层循环变量j=i执行语句“t=t+b[i][b[j][j]]”,相当于t=t+b[0][b[0)[0]],由于b[0][0]的值为0,得到t的值为1;依次类推,循环共执行了3次,最后输出t的值为4。

  • 第5题:

    有下列程序: include void fun(int * s,int n1,int n2) { int i,j,

    有下列程序: #include <stdio.h> void fun(int * s,int n1,int n2) { int i,j,t; i=n1;j=n2; while(i<j){t=s[i];s[i]=s[j];s[j]=t;i++;j--;} } main() { int a[10]={1,2,3,4,5,6,7,8,9,0},k; fun(a,0,3); fun(a,4,9);fun(a,0,9); for(k=0;k<10;k++)printf("%d",a[k]);printf("\n"); } 程序的运行结果是( )。

    A.987654321

    B.4321098765

    C.5678901234

    D.987651234


    正确答案:C
    解析:从题目的主函数入手,定义了一个一维数组并赋韧值,接着调用函数fun(),fun()函数的功能为使数组中的元素逆序,当调用 fun(a,0,3),将实参传递给形参实现数组a中a[0]-a[3]这4个元素逆序;同理调用fun(a,4,9)是将上步排列好的a数组中a[4]-a[9]这6个元素逆序;调用fun(a,0,9)是将数组中a[0]-a[9]这10个元素在逆序,再用printf()函数输出结果为5678901234,故选项C)正确。

  • 第6题:

    下面程序段的时间复杂度是(9)。for(i=0,k=0;<n;1++){ k+=A[i][j]; for(j=1;j<m;j++) A[i][j]=1}

    A.O(n)

    B.O(m+n+1)

    C.O(m+n)

    D.O(m*n)


    正确答案:D
    解析:时间复杂度是解决问题的时间和问题的规模之间的关系,即解决问题所耗费的时间随问题规模增长成怎样的增长对应关系。本题中最内部的循环的执行次数为m*n,所以整段程序的复杂度为O(m*n)。

  • 第7题:

    下列程序段的招待结果是______ 。 s=0 t=0 u=0 For i = 1 To 3 For j = 1 To i For k = j To 3 s=s+ 1 Next k t=t+1 Next j u=u+ 1 Next i Print s; t; u

    A. 14 6 3

    B.6 14 3

    C.9 8 7

    D.8 9 10


    正确答案:A

  • 第8题:

    以下程序的输出结果是 main() { int b[3][3]={0,1,2,O,l,2,0,1,2},i,j,t=1; for(i=0;i<3;i++) for(j=i;j<=i;j++) t=t+b[i][b[j][j]]; printf("%d\n",t); }

    A.3

    B.4

    C.1

    D.9


    正确答案:B
    解析:本题中定义了一个二维数组b并初始化,定义了一个变量t并赋初值1。接着通过一个二重循环将若干个元素的值加到变量t中。循环的执行步骤是:外层循环变量i=0时,内层循环变量j=i,执行语句“t=t+b[i][b][j][j]]”,相当于t=t+b[0][b][0][0]],由于b[0][0]的值为0,得到t的值为1;依次类推,循环共执行了3次,最后输出t的值为4。所以,4个选项中B为所选。

  • 第9题:

    有以下程序includevoidfun(int*s,intn1,intn2){inti,j,t; i=n1j=n2; while(i

    有以下程序 #include <stdio.h> void fun(int *s,int n1,int n2) { int i,j,t; i=n1 j=n2; while(i<j) {t=s[i];s[i]=s[j];s[j]=t;i++;j--;} } main() { int a[10]={1,2,3,4,5,6,7,8,9,0},k; fun(a,0,3); fun(a,4,9); fun(a,0,9); for(k=0;k<10;k++)printf("%d",a[k]); printf("\n"); } 程序的运行结果是

    A.987654321

    B.4321098765

    C.5678901234

    D.987651234


    正确答案:C
    解析:函数fun(int *s,int n1,int n2)的功能是对数组s中的元素进行首尾互相调换。所以在主函数中,当 fun(a,0,3)执行完后,数组a[12]={4,3,2,1,5.6,7,8,9,01;再执行fun(a,4,9),数组a[12]={4,3,2,1,0,9,8,7,6,5};再执行fun(a,0,9)后,数组a[12]={5,6,7,8,9,0,1,2,3,4}。

  • 第10题:

    下列程序段的时间复杂度为()。for(i=0;i<m;i++)for(j=0;j<t;j++)e[i][j]=0;for(i=0;i<m;i++)for(j=0;j<t;j++)for(k=0;k<n;k++)c[i][j]_c[i][j]+a[i][k]×b[k][j];

    A.O(m×n×t)
    B.O(m+n+t)
    C.O(m×t+n)
    D.O(m+n×t)

    答案:A
    解析:
    在程序段中,有两段循环程序,第一段是一个双层嵌套循环,另一个是三层嵌套循环,所以基本操作是c[i][j]=c[i][j]+a[i][k]×b[k][j],此基本操作共执行m×t×n次。

  • 第11题:

    下面程序段在执行完成后,a的值为() int j=0,k=0,a=0; while(j<3) {j++;a=a+1;k=0;while(k<=2) {k++;if(k%2!=0)continue;a=a+1;} a=a+1;}

    • A、6
    • B、8
    • C、9
    • D、10

    正确答案:C

  • 第12题:

    单选题
    有以下程序: #include  void fun(int *s,int n1,int n2) {  int i,j,t;  i=n1;  j=n2;  while(i  {   t=s[i];   s[i]=s[j];   s[j]=t;   i++;   j--;  } } main() {  int a[10]={1,2,3,4,5,6,7,8,9,0},k;  fun(a,0,3);  fun(a,4,9);  fun(a,0,9);  for(k=0;k   printf("%d",a[k]);  printf(""); } 程序运行的结果是(  )。
    A

    0987654321

    B

    4321098765

    C

    5678901234

    D

    0987651234


    正确答案: C
    解析:
    函数fun的功能是:将数组s中从n1至n2的元素首尾互换,主函数中,依次对数组a的0~3、4~9、0~9位进行了三次调换,第一次调用后得到数组a为:{4,3,2,1,5,6,7,8,9,0},第二次调用后得到数组a为:{4,3,2,1,0,9,8,7,6,5},第三次调用后得到数组a为:{5,6,7,8,9,0,1,2,3,4}。答案选择C选项。

  • 第13题:

    阅读分析本题程序段后回答问题:(1)程序实现了什么功能?(2)写出程序的输出结果

    阅读分析本题程序段后回答问题:

    (1)程序实现了什么功能?(3分)

    (2)写出程序的输出结果;(4分)

    (3)写出算法的时间复杂度。(3分)

    #include "stdio.h"

    #define N 7

    typedef int datatype;

    void main(void)

    { int 1,j,t;

    datatype data[N]={1,2,3, 4,5,6, 7}; /*处理的数据

    */

    i=0;

    j=N-1;

    while (i<j)

    { t=data[i];

    data[i++ ]=data[j];

    data[j--]=t;

    }

    printf(”运行结果为: \n"); 

    for(i= =0;i<N-1;i++)

    printf("%d; ",data[i]);

    }


    答案:

    (1)实现的功能:将数组里的数组逆序输出

    (2)7;6;5;4;3;2

    (3)时间复杂度为n

    解析:

    因为i<N-1,所以最后输出的结果中不会有1

  • 第14题:

    下面程序段的时间复杂度是()。for(j=0;jfor(k=0;ka[j][k]=j*k;

    A、O(m2)

    B、O(n2)

    C、O(m*n)

    D、O(m+n)


    参考答案:B

  • 第15题:

    下面程序段的输出结果是( )。 public class Test t public static void main(String[] args) { int x=0; for (int i=1;i<=4;i++) { x=4; for(int j=1;j<=3; j++) { x=3; for(int k=1; k<=2; k++) x=x+6; } } System. out. println (x); } }

    A.36

    B.48

    C.144

    D.15


    正确答案:D
    解析:题目中是一个三个循环的嵌套,但是每次循环时,x都将重新赋值,所以只计算最后一次即可,x=3,执行了两次x=x+6,所以x=15,选D。

  • 第16题:

    有以下程序 main() {int a[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,j,k,t; for(i=0;i<4;i++) for(j=0;j<3;j++) for(k=j+1;k<4;k++) if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}/*按列排序*/ for(i=0;i<4;i++)printf("%d,",a[i][i]);

    A.1,6,5,7,

    B.8,7,3,1,

    C.4,7,5,2,

    D.1,6,2,1,


    正确答案:A
    解析: 本题利用多重for循环的嵌套来实现对二维数组元素的按列排序。利用最外层循环来实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列,最后输出对角线上的元素值。

  • 第17题:

    有下列程序: #include<stdi0.h> voidfun(int*S,intn1,intn2) { inti,j,t; i=n1;j=n2 while(i<j){t=s[i];s[i]=s[j];s[j]=t;i++;j --;} } voidmain( ) { inta[10]={1,2,3,4,5,6,7,8,9,0),k; fun(a,0,3);fun(a,4,9);fun(a,0,9); for(k=0;k<10;k++)printf(”%d”,a[k]);printf ("\n"); } 程序的运行结果是( )。

    A.0987654321

    B.4321098765

    C.5678901234

    D.0987651234


    正确答案:C
    C。【解析】本题定义一个一维数组并赋初值,接着调用fun,功能是使数组中的元素逆序,当调用fun(a,0,3),将实参传递给形参实现数组a中a[0]至a[3]这4个元素逆序;同理调用fun(a,4,9)是将上步排列好的a数组中a[4]至a[9]这6个元素逆序;调用fun£a,0,9)是将数组中a[o]至a[9]这10个元素再逆序,再用printf函数输出结果为5678901234,故选项C正确。

  • 第18题:

    有如下程序段#include "stdio.h"void fun(int *a,int *b,int *c,int *d,int *e){ int i,j,k,m; for(i=0;i< *a;i++) for(j=0;j< *b;j++)  for(k=0;k<*c;k++)  for(m=0;m< *d;m++)  ++*e;}main(){ int a=10,b=10,c=10,d=10,e=0; fun(&a,&b,&c,&d,&e); printf("%d\n",e);} 则程序段的输出结果是A.10000 B.1000 C.100 D.0


    正确答案:A
    在本题中,程序首先定义了一个无返回值的函数fun,该函数带有五个整型的指针形参变量,然后通过一个四层循环来操作++*e;语句,由于*与++运算符的优先级一样,它们都是自右至左结合的操作,因此,++*e等价于++(*e),这个操作可描述为:先用地址取值,然后对其进行自加,由于是通过传址传值法的,因此,还需要将相加后的结果传递到实参中。
    在主函数中,定义五个整型变量并分别赋初值,然后调用fun函数,传递的参数是刚定义的五个整型变量的地址,采用的是传址传值法,能为实参带回一个结果值。从fun函数中我们不难看出,当变量a,b,c,d分别为10时,循环总共执行10000次,即自加进行了10000次,而且每次自加后都改变了实参的结果。因此,循环结束后,变量e的值为10000。本题的正确答案是A。

  • 第19题:

    有以下程序

    main()

    {int a[4][4]={{l,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,j,k,t;

    for(i=0;i<4;i++)

    for(j=0;j<3;j++)

    for(k=j+1;k<4;k++)

    if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}/*按列排序*/

    for(i=0;i<4;i++)printf("%d,",a[i][i]);

    }

    程序运行后的输出结果是

    A.1,6,5,7,

    B.8,7,3,1,

    C.4,7,5,2,

    D.1,6,2,1,


    正确答案:A
    解析:本题利用多重 for循环的嵌套来实现对二维数组元素的按列排序。利用最外层循环来实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列,最后输出对角线上的元素值。

  • 第20题:

    有以下程序

    #include <stdio.h>

    void fun(int *s,int n1,int n2)

    { int i,j,t;

    i=n1; j=n2;

    while(i<j) {t=s[i];s[i]=s[j];s[j]=t;i++;j--;}

    }

    main()

    { int a[10]={1,2,3,4,5,6,7,8,9,0},k;

    fun(a,0,3); fun(a,4,9); fun(a,0,9);

    for(k=0;k<l0;k++)printf("%d",a[k]); printf("\n");

    }

    程序的运行结果是

    A.0987654321

    B.4321098765

    C.5678901234

    D.0987651234


    正确答案:C
    解析:函数fun(int *s,int n1,int n2)的功能是对数组s中的元素进行首尾互相调换。所以在主函数中,当fun(a,0,3)执行完后,数组a[12]={4,3,2,1,5,6,7,8,9,0};再执行fun(a,4,9),数组a[12]={4,3,2,1,0,9,8,7,6,5};再执行fun(a,0,9)后,数组a[12]={5,6,7,8,9,0,1,2,3,4}。

  • 第21题:

    有以下程序 main() { int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++) for(j=i;j<=i;j++)t=t+b[i][b][j][j]]; printf("%d\n",t); } 程序运行后的输出结果是( )

    A.3

    B.4

    C.1

    D.9


    正确答案:B

  • 第22题:

    写出程序的运行结果。 #include main( ) { int i=0,j=0,k=0,m; for ( m=0;m<4;m++ ) switch ( m ) { case 0:i=m++; case 1:j=m++; case 2:k=m++; case 3:m++; } printf ("/n%d,%d,%d,%d",i,j,k,m); } 该程序的执行结果是()。

    • A、0,1,2,5
    • B、0,1,2,4
    • C、0,1,1,3
    • D、0,1,2,3

    正确答案:A

  • 第23题:

    单选题
    写出程序的运行结果。 #include main( ) { int i=0,j=0,k=0,m; for ( m=0;m<4;m++ ) switch ( m ) { case 0:i=m++; case 1:j=m++; case 2:k=m++; case 3:m++; } printf ("/n%d,%d,%d,%d",i,j,k,m); } 该程序的执行结果是()。
    A

    0,1,2,5

    B

    0,1,2,4

    C

    0,1,1,3

    D

    0,1,2,3


    正确答案: C
    解析: 暂无解析

  • 第24题:

    单选题
    下面程序段在执行完成后,a的值为() int j=0,k=0,a=0; while(j<3) {j++;a=a+1;k=0;while(k<=2) {k++;if(k%2!=0)continue;a=a+1;} a=a+1;}
    A

    6

    B

    8

    C

    9

    D

    10


    正确答案: A
    解析: 暂无解析