把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法(用K表示)?请设计一个算法计算K值(只需要计算K值,不用把具体的分法输出)。注意:5,1,1和1,5,1是同一种分法。

题目

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法(用K表示)?请设计一个算法计算K值(只需要计算K值,不用把具体的分法输出)。注意:5,1,1和1,5,1是同一种分法。


相似考题
更多“把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法(用K表示)?请设计一个算法计算K值(只需要计算K值,不用把具体的分法输出)。注意:5,1,1和1,5,1是同一种分法。”相关问题
  • 第1题:

    计算π的近似值的一个公式是π/4=1-1/3+1/5_1/7+…+(-1)n-11/(2n-1)。某人编写下面的程序用此公式计算并输出π的近似值:

    Private Sub Command1_Click()

    PI=1

    Sign=1

    13=20000

    For k=3 To n

    sign=-sign

    PI=PI+sign/k

    Next k

    Print PI*4

    End sub

    运行后发现结果为3.22751,显然,程序需要修改。下面修改方案中正确的是

    A.把For k=3To n改为For k=1 To n

    B.把U=20000改为n=20000000

    C.把For k:3 To n改为For k=3 To n Step 2

    D.把PI=1改为PI=0


    正确答案:C
    解析:在π/4的近似求解公式中,分母是等差增加的,第一项分母可看作是1,第二项是3,第三项是7,依次类推。所以循环变量k应该每次增加2,故选项C)正确。程序中2n-一1是用k来控制的,(-1)n-1是通过sign来控制的。程序从首次运行结果是:1-1/3,继而不断增项。

  • 第2题:

    下列给定的程序中,函数fun()的功能是: 计算并输出k以内最大的6个能被7或11整除的自然数之和。K的值由主函数传入,若k的值为500,则函数的值为2925。

    请改正程序中的错误,使它能得到正确结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

    试题程序:

    include<stdio.h>

    include<conio.h>

    int fun(int k)

    {

    int m=0,mc=0,j;

    /*************found*************/

    while(k>=2)&&(mc<6)

    {

    /*************found*************/

    if((k%7=0)||(k%ll=0))

    {

    /*************found**************/

    m=k;

    mc++;

    }

    k--;

    }

    return m;

    }

    main()

    {

    clrscr();

    printf("%d\n",fun(500));

    }


    正确答案:(1)错误:while(k>=2)&&(mc6) 正确:while((k>=2)&&(mc6)) (2) 错误:if((k%7=0)||(k%11=0)) 正确:if((k%7==0)||(k%11=0)) (3) 错误:m=k 正确:m=m+k;
    (1)错误:while(k>=2)&&(mc6) 正确:while((k>=2)&&(mc6)) (2) 错误:if((k%7=0)||(k%11=0)) 正确:if((k%7==0)||(k%11=0)) (3) 错误:m=k 正确:m=m+k; 解析:错误1:C语言规定while语句后的表达式两侧必须要有圆括号。错误2:if语句的判断条件应用关系运算符,而不是赋值运算符。错误3:根据题意,将满足条件的数求累加和。

  • 第3题:

    以下程序中,函数 sumColumM的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。请填空。

    define M 2

    define N 4

    void SumColumMin(int a[M][N],int *sum)

    { int i,j,k,s=0;

    for(i=0;i〈N;i++)

    { k=0;

    for(j=1;j<M;j++)

    if(a[k][i]>a[j][i])k=j;

    s+=【 】;

    }

    【 】 =s;

    }

    main( )

    { int x[M][N]={3,2,5,1,4,1,8,3},s;

    SumColumMin(【 】);

    printf("%d\n",s);

    }


    正确答案:a[k][i] *sum x[M][N]&s
    a[k][i] *sum x[M][N],&s 解析:本题中if(a[k][I] >a [j] [I]) k=j;把一列中值较小的一个元素的索引存储到k中,所以[18]填[k] [i],[19]填返回值,右值为整型,所以应该填。sum,SnmColumMin(  )函数第一个参数为数组a[M][N],第二个参数为一个整型指针,所以[20]填x[M][N],&s。

  • 第4题:

    ( 26 )计算二的近似值的一个公式是

    某人编写下面的程序用此公式计算并输出 π 的近似值:

    Private Sub Comand1_Click ()

    PI = 1

    Sign = 1

    n=20000

    For k=3 To n

    Sign=-Sign/k

    PI=PI+Sign/k

    Next k

    Print PI*4

    End Sub

    运行后发现结果为 3.22751 ,显然,程序需要修改。下面修改方案中正确的是

    A )把 For k=3 To n 改为 For k=1 To n

    B )把 n=20000 改为 n=20000000

    C )把 For k=3 To n 改为 For k=3 To n Step 2

    D )把 PI=1 改为 PI=0


    正确答案:C

  • 第5题:

    请编写一个函数fun(),它的功能是:求出1到m(含m)之内能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。

    例如,若传给m的值为50,则程序输出:

    7 11 14 21 X 28 33 35 42 44 49

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include<conio.h>

    include<stdio.h>

    define M 100

    void fun(int m, int *a, int *n)

    {

    }

    main()

    {

    int aa[M],n,k;

    clrscr();

    fun(50,aa,&n);

    for(k=0;k<n; k++)

    if((k+1)%20==0) /*每行输出20个数*/

    {printf("%4d",aa[k]);

    printf("\n");

    }

    else

    printf("%4d",aa[k]);

    printf("\n");

    }


    正确答案:void fun(int mint *aint *n) { int ij=0; for(i=1;i=m;i++) if(i%7==0||i%11==0) /*求出1到m(含m)之内能被7或11整除的所有整数放在数组a中*/ a[j++]=i; *n=j; /*返回这些数的个数*/ }
    void fun(int m,int *a,int *n) { int i,j=0; for(i=1;i=m;i++) if(i%7==0||i%11==0) /*求出1到m(含m)之内能被7或11整除的所有整数放在数组a中*/ a[j++]=i; *n=j; /*返回这些数的个数*/ } 解析:本题要找出能被7或11整除的所有整数,注意数学中的“或”和C语言中的“或”的区别,但在此处,if条件语句中用了“||”运算符,若要找能同时被7和11整除的所有整数则在if()中应用“&&”运算符。

  • 第6题:

    阅读以下说明和C程序,将应填入(n)处。

    [说明]

    某种传感器的输出值Ratio依赖于环境温度temp(-40℃≤temp≤50℃)。对一组环境温度值(ITEMS个),人们已经测量得到了相应的Ratio值(见表1)。该表粗略地描述了曲线Ratio(temp)。

    校正系数K是Ratio的倒数,因此也依赖于环境温度temp。在数据处理中,人们需要用更多的列表值细致地描述曲线K(temp),如表2所示。在表2中,各温度值所对应的K值是对表1进行线性插值再求倒数得到的,具体的计算方法如下:

    1.根据temp值,在表1中用二分法查找;

    2.若找到相应的温度值,则按相应的Ratio值求倒数得到K值:

    3.若没找到相应的温度值,则可确定temp所在的温度区间[Tp1, Tp2],同时获得了相应的Ratio1和Ratio2,再按如下公式计算K值:

    Step=(Ratlo1-Ratio2)/(Tp1-Tp2)

    K=1.0/(Ratio1+Step*(temp-Tp1))

    在程序中,当temp高于50℃或低于-40℃时,设定K=0。

    [程序]

    include <stdio.h>

    typedef struct {

    int Temp; /*环境温度*/

    double Ratio; /*传感器的输出值*/

    }CURVE;

    define ITEMS 7

    double GetK(int, CURVE*, int);

    void main()

    {

    int Degree;

    double k;

    CURVE Curve[ITEMS]={ {-40,0.2},{-20,0.60},{-10,0.8},{0,1,0},

    {10,1.17},{30,1.50}, {50,1.8} };

    printf("环境温度 校正系数\n");

    for( Degree= 40; Degree<=50; Degree++){

    k=GetK(Degree, Curve, ITEMS);

    printf(" %3d %4.2f\n",Degree,k);

    }

    }

    double GetK(int Temp, CURVE *p, int n)

    {/*用二分法在n个元素的有序表p中查找与Temp对应的传感器输出值*/

    int low,high,m; double Step;

    low=0; high=n-1;

    if((Temp<p->Temp) ||( Temp>(p+high)->Temp))

    return 0.0; /*超出温度范围时返回0.0*/

    while (low<=high){

    m=(1) ;

    if(Temp==(p+m)->Temp)

    return (2);

    if (Temp<(p+m)->Temp)high=m-1;

    else low=(3);

    }

    p+= high;

    Step=((4))/((p+1)->Temp-p->Temp);

    return 1.0/(p->Ratio +Step *((5)));

    }


    正确答案:(1)(low+high)/2 (2)1.0/(p+m)->Ratio (3)m+1 (4)(p+1)->Ratio-p->Ratio (5)Temp-p->Temp
    (1)(low+high)/2 (2)1.0/(p+m)->Ratio (3)m+1 (4)(p+1)->Ratio-p->Ratio (5)Temp-p->Temp 解析:本题考查了线性插值计算及二分查找。
    函数GetK(int Temp,CURVE *p,int n)用二分法在n个元素的有序表p中查找与Temp对应的传感器输出值,表中的元素已经按照温度值有序排列。进行二分查找时,首先计算表的中间位置,即[(low+high)/2],若待查元素等于中间位置上的元素,则查找成功并结束查找过程;若待查元素大,则在后半区间([m+1,high])继续进行二分查找:否则,在前半区间(pow,m-1])进行二分查找。如下图所示。

    以查找温度值-25为例,由于-250,因此设置下一个查找区间为[0,2],如下图所示。

    由于-25-20,所以取high等于m-1,进一步,由于-25>-40,所以取low等于 m+1,如下图所示,至此,由于查找区间为空(10w>high),则可确定查找失败。

    因此,空(1)处应填入“(low+high)/2”,空(3)处应填入“m+1”。根据题干的描述,若找到相应的温度值,则按相应的Ratio值求倒数得到K值,因此空(2)处应填入“1.0/(p+m)->Ratio”。若未找到相应的温度值,则结束查找时low>high。
    根据题干中描述的线性插值再求倒数计算方法和p+=high:可得到计算Step和K的算式:
    Step=((p+1)->Ratio-p->Ratio)/(Tp1-Tp2)
    K=1.0/(p->Ratio+Step*(Temp-p->Temp))

  • 第7题:

    10只无差别的橘子放到3个不同的盘子里。允许有的盘子空着。请问一共有多少种不同的放法?

    A.36

    B.66

    C.54

    D.72


    正确答案:B
    此题相当于“13只橘子放到3个不同的盘子里,每个盘子至少有一个橘子,求有多少种放法?”此时可运用隔板法,相当于在13个橘子所形成的12个空格中插入两个隔板,有HWOCRTEMP_ROC570种放法。

  • 第8题:

    若一个栈初始为空,其输入序列是1,2,3…,n-l,n.其输出序列的第一个元素为 k (l≤k≤[n/2]),则输出序列的最后一个元素是(58) 。

    A.值为n的元素

    B.值为1的元素

    C.值为n-k的元素

    D.不确定的


    正确答案:D
    本题考查数据结构基础知识。以n等于4举例说明。输入序列为1234.输出序列的第一个元素可以为1或2。若为1,则输出序列可能为1234、1243、1342、1324、1432;若为2,则输出序列为2134、2143、2314、2341、2431。以上序列都可由合法的入栈、出栈操作序列给出,从中可知无法确定输出序列中最后1个元素的值。

  • 第9题:

    试计算A3.75M0.5N电极系的K值。


    正确答案: 根据K值计算公式:K=4Ω×(AM×AN/MN),故A3.75M0.5N的K值为:
    K=4Ω×3.75×4.25/0.5=400.554米。

  • 第10题:

    线性有序表(a1,a2,a3,…,a256)是从小到大排列的,对一个给定的值k,用二分法检索表中与k相等的元素,在查找不成功的情况下,最多需要检索()次。设有100个结点,用二分法查找时,最大比较次数是()。


    正确答案:8;7

  • 第11题:

    问答题
    把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法(用K表示)?请设计一个算法计算K值(只需要计算K值,不用把具体的分法输出)。注意:5,1,1和1,5,1是同一种分法。

    正确答案: 例:M=7,N=3则有K=8
    可能的分法为:
    7,0,0
    6,1,0
    5,2,0
    4,3,0
    5,1,1
    4,2,1
    3,3,1
    3,2,2
    设f(m,n)为m个苹果,n个盘子的放法数目,则先对n作讨论,如果n>m,必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响;即if(n>m)f(m,n)=f(m,m)当n<=m时,不同的放法可以分成两类:即有至少一个盘子空着或者所有盘子都有苹果,前一种情况相当于f(m,n)=f(m,n-1);后一种情况可以从每个盘子中拿掉一个苹果,不影响不同放法的数目,即f(m,n)=f(m-n,n).而总的放苹果的放法数目等于两者的和,即f(m,n)=f(m,n-1)+f(m-n,n)。边界条件为m=0或n=1时,只有一种放法。
    解析: 暂无解析

  • 第12题:

    单选题
    把10个苹果分成三堆,要求每堆至少1个,至多5个,则不同的分法共有(  ).
    A

    4种

    B

    5种

    C

    6种

    D

    7种


    正确答案: B
    解析:
    分法分别为(1,4,5)、(2,4,4)、(2,3,5)、(3,3,4)共四种.

  • 第13题:

    10个大小相同的橘子放到3个不同的盘子里,允许有的盘子空着。请问一共有多少种不同的放法? A.286 B.220 C.120 D.66


    正确答案:D
    将10个大小相同的橘子放到3个不同的盘子里,允许有的盘子空着。若事先在每个盘子里各加1个橘子,此题就变成把13个大小相同的橘子放到3个不同的盘子里,每个盘子里至少有1个橘子。此时可利用隔板法,把13个橘子排成一列,则13个橘子之间有12个空隙。只要选定这12个空隙中的2个.在这2个空隙中分别放一块隔板,即可分成3组。所以只要求出从12个空隙中任意选出2个空隙有多少种方法

  • 第14题:

    为计算a“的值,某人编写了函数power如下:

    Private Function power(a As Integer,n As Integer)As Long

    Dim P As Long

    P=a

    For k=l T0 n

    P=P * a

    Next k

    poWer=P

    End Function

    在调试时发现是错误的,例如Print power(5,4)的输出应该是625,但实际输出是3125。程序需要修改。下面的修改方案中有3个是正确的,错误的一个是

    A.把For k=1 To n改为For k=2 To n

    B.把P=P*a改为P=p^n

    C.把Fork=1 To n改为For k=1 To n-1

    D.把P=a改为P=1


    正确答案:C
    解析:计算an应该循环n次,所以此处k的取值应为1 to n,而非n-1。

  • 第15题:

    计算的近似值的一个公式是π/4=1-(1/3)+(1/5)-(1/7)+…+(-1)n-1(1/2n -1)。 某人编写下面的程序用此公式计算并输出的近似值: Private Sub Cornmand1 Click( ) P1=1 Sign=1 n=20000 For k=3 To r Sign=-Sign PI=PI+SiRn/k Next k Print PI*4 End Sub 运行后发现结果勾3.22751,显然,程序需要修改。下面修改方案中正确的是( )。

    A.把For k=3 To n改为For k=1 To n

    B.把n=20000改为n=20000000

    C.把For k=3 To n改为For k=3 To n Step 2

    D.把PI=1改为P1=0


    正确答案:C
    c。【解析】Stop用在for循环中,表示每一次循环,变量增加几,本题中按照公式,k作为分母,值应为奇数,所以应用Fo,k=3TonStep2。是从3开始的奇数,所以本题为C。

  • 第16题:

    请编写一个函数comm(int n,int k),该函数将用递归算法计算从n个人中选择k个人组成一个委员会的不同组合数,由n个人里选k个人的组合数=由(n-1)个人里选k个人的组合数+由(n-1)个人里选(k-1)个人的组合数。

    注意:部分源程序已存在文件test41_2.cpp中。

    请勿修改主函数main和其他函数中的任何内容,仅在函数comm的花括号中填写若干语句。

    源程序文件test41-2.cpp清单如下:

    include<iostream.h>

    int comm(int n, int k)

    {

    }

    void main ( )

    {

    int n=7, k=3;

    cout<<"n=7,k=3"<<endl;

    cout<<comm(n,k)<<endl;

    }


    正确答案:int comm(int n int k) { if(k>n) return 0; else if(n==k||k==0) return 1; else return comm(n-1k)+comm(n-1k-1); }
    int comm(int n, int k) { if(k>n) return 0; else if(n==k||k==0) return 1; else return comm(n-1,k)+comm(n-1,k-1); } 解析:本题考查的是考生对简单的递归函数的应用。递归函数是算法设计中比较经典的一种,它主要应用数学的递推公式进行反复的迭代计算并最终得到正确答案,在编程上体现为在函数体内部对自身的调用。本题的大体思路为:递归的结束条件为n=k或者k=0,否则就递推的调用公式右端的两项继续训算,直到满足结束条件再逐层返回。

  • 第17题:

    阅读以下技术说明和C代码,将C程序中(1)~(5)空缺处的内容填写完整。

    [说明]

    某种传感器的输出值Ratio依赖于环境温度temp(-40℃≤temp≤50℃)。对一组环境温度值(ITEMS个),已经测量得到了相应的Ratio值(如表4-10表格所示)。表4-10粗略地描述了曲线Ratio(temp)。

    校正系数K是Ratio的倒数,因此也依赖于环境温度temp。在数据处理中,需要用更多的列表值细致地描述曲线K(temp),如表4-11所示。

    在表4-11中,各温度值所对应的K值是对表4-10进行线性插值再求倒数得到的,具体的计算方法如下。

    1) 根据temp值,在表4-10中用二分法查找;

    2) 若找到相应的温度值,则按相应的Ratio值求倒数得到K值;

    3) 若没找到相应的温度值,则可确定temp所在的温度区间[Tp1,Tp2],同时获得了相应的Ratio1和 Ratio2,再按如下公式计算K值:

    在程序中,当temp高于50℃或低于-40℃C时,设定K=0。

    [C程序]

    include

    typedef struct {

    int Temp; /* 环境温度 */

    double Ratio; /* 传感器的输出值 */

    }CURVE;

    define ITEMS 7

    double GetK(int Temp,CURVE *p,int n)

    { /* 用二分法在n个元素的有序表p中查找与Temp对应的传感器输出值 */

    int low, high, m;

    double Step;

    low = 0;

    high = n-1;

    if ((Temp<p->Temp) || (Temp>(p+high)->Temp))

    return 0.0; /* 超出温度范围时返回 0.0 */

    while (low<=high)

    { m=(1);

    if (Temp==(p+m)->Temp)

    return (2);

    if (Temp<(p+m) >Temp)

    high=m-1;

    else

    low=(3);

    }

    p+=high;

    Step=( (4) )/((p+1)->Temp-p->Temp);

    return 1.0/ (p->Ratio + Step*( (5) ) ;

    }

    void main()

    { int Degree;

    double k;

    CURVE Curve [ITEMS]={{-40,0.2},{-20,0.60.},{-10,0.8},{0,1.0},{10,1.17},{30,1.50},{50,1.8}};

    printf ("环境温度 校正系数\n");

    for (Degree=-40;Degree<=50;Degree++)

    { k=GetK ( Degree, Curve, ITEMS);

    printf("%3d %4.2f\n",Degree,k);

    }

    }


    正确答案:这是一道要求读者掌握线性插值计算及二分查找算法的C语言程序设计题。本题的解答思路如下。 1) 试题中已给出函数GetK(intTempCURVE *pint n)用二分法在n个元素的有序表p中查找与Temp对应的传感器输出值表中的元素已经按照温度有序排列。 2) 结合本题的应用背景二分查找算法是指先计算表的中间位置即[(low+high)/2]若待查元素等于中间位置上的元素则查找成功并结束查找过程;若待查元素大则在后半区间([m+1high])继续进行二分查找:否则在前半区间(lowm-1])进行二分查找如图4-17所示。本试题中low=0m=3high=6。 图4-17 二分查找算法示意图1 3) 以查找温度值20℃C为例由于20℃>0℃因此设置下一个查找区间为([m+1high))即[46]如图4—18所示。 图4-18 二分查找算法示意图2 4) 由于20℃30℃因此取high等于m-1即下一个查找区间为([lowm-1])即[45]。再进一步分析由于20℃>10℃因此取low等于m+1即再下一个查找区间为[55]。而查找区间[55]上的数据30≠20至此可确定此次查找失败即如图4-19所示。 图4-19 二分查找算法示意图3 5) 由以上分析可知(1)空缺处应填入“(low+high)/2”。 6) 程序中“if(Temp==(p+m)->Temp)”语句用于判断是否找到相应的温度值若找到则执行“return (2)”语句以返回相应温度的校正系数K。由试题关键信息“若找到相应的温度值则按相应的Ratio值求倒数得到K值”可推理出(2)空缺处应填入“1.0/(p+m)->Ratio”。 7) 当“if(Temp==(p+m)->Temp)”语句的判断条件不满足时将执行“if(Temp(p+m)->Temp)”判断语句。若待查元素小将执行“high=m-1;”语句即在前半区间([lowm-11)进行二分查找。若待查元素大则在后半区间([m+1high]继续进行二分查找因此else语句中则需将“low”指针向上移动即执行“low=m+1”语句。 8) 根据题干中给出的计算式子“Step=”以及题目中要求线性插值再求倒数得到K值可推理出(4)空缺处应填入“(p+1)->Ratio-p->Ratio”。 9) 同理根据题干中给出的计算式子“”可推理出(5)空缺处应入“Temp-p->Temp”。
    这是一道要求读者掌握线性插值计算及二分查找算法的C语言程序设计题。本题的解答思路如下。 1) 试题中已给出函数GetK(intTemp,CURVE *p,int n)用二分法在n个元素的有序表p中查找与Temp对应的传感器输出值,表中的元素已经按照温度有序排列。 2) 结合本题的应用背景,二分查找算法是指先计算表的中间位置,即[(low+high)/2],若待查元素等于中间位置上的元素,则查找成功并结束查找过程;若待查元素大,则在后半区间([m+1,high])继续进行二分查找:否则,在前半区间(low,m-1])进行二分查找,如图4-17所示。本试题中low=0,m=3,high=6。 图4-17 二分查找算法示意图1 3) 以查找温度值20℃C为例,由于20℃>0℃,因此设置下一个查找区间为([m+1,high)),即[4,6],如图4—18所示。 图4-18 二分查找算法示意图2 4) 由于20℃30℃,因此取high等于m-1,即下一个查找区间为([low,m-1]),即[4,5]。再进一步分析,由于20℃>10℃,因此取low等于m+1,即再下一个查找区间为[5,5]。而查找区间[5,5]上的数据30≠20,至此可确定此次查找失败,即如图4-19所示。 图4-19 二分查找算法示意图3 5) 由以上分析可知,(1)空缺处应填入“(low+high)/2”。 6) 程序中“if(Temp==(p+m)->Temp)”语句用于判断是否找到相应的温度值,若找到,则执行“return (2)”语句以返回相应温度的校正系数K。由试题关键信息“若找到相应的温度值,则按相应的Ratio值求倒数得到K值”可推理出,(2)空缺处应填入“1.0/(p+m)->Ratio”。 7) 当“if(Temp==(p+m)->Temp)”语句的判断条件不满足时,将执行“if(Temp(p+m)->Temp)”判断语句。若待查元素小,将执行“high=m-1;”语句,即在前半区间([low,m-11)进行二分查找。若待查元素大,则在后半区间([m+1,high],继续进行二分查找,因此else语句中则需将“low”指针向上移动,即执行“low=m+1”语句。 8) 根据题干中给出的计算式子“Step=”,以及题目中要求线性插值再求倒数得到K值可推理出(4)空缺处应填入“(p+1)->Ratio-p->Ratio”。 9) 同理,根据题干中给出的计算式子“”可推理出,(5)空缺处应入“Temp-p->Temp”。

  • 第18题:

    计算的近似值的一个公式是π/4=1-(1/3)+(1/5)-(1/7)+…+(-1)n-1(1/2n -1)。

    某人编写下面的程序用此公式计算并输出的近似值:

    Private Sub Cornmand1 Click( )

    P1=1

    Sign=1

    n=20000

    For k=3 To r

    Sign=-Sign

    PI=PI+SiRn/k

    Next k

    Print PI*4

    End Sub

    运行后发现结果勾3.22751,显然,程序需要修改。下面修改方案中正确的是( )。

    A.把For k=3 To n改为For k=1 To n

    B.把n=20000改为n=20000000

    C.把For k=3 To n改为For k=3 To n Step 2

    D.把PI=1改为P1=0


    正确答案:C
    c。【解析】Stop用在for循环中,表示每一次循环,变量增加几,本题中按照公式,k作为分母,值应为奇数,所以应用Fo,k=3TonStep2。是从3开始的奇数,所以本题为C。

  • 第19题:

    把7个不能区分的苹果放到3个不同的盘子里(允许有空盘),有多少种不同的放法?

    A.21

    B.18

    C.36

    D.38


    正确答案:C
    [答案] C。解析:题中所述操作相当于:将10个不能区分的苹果放到三个盘子中(每个盘子至少一个苹果),运用隔板法,C92=36。

  • 第20题:

    若一个栈初始为空,其输入序列是1,2,3,…,n-1,n,其输出序列的第一个元素为k(1≤k≤「n/2」),则输出序列的最后一个元素是()。

    • A、值为n的元素
    • B、值为1的元素
    • C、值为n-k的元素
    • D、不确定的

    正确答案:D

  • 第21题:

    将7个乒乓球放入3个同样的盒子里,允许有的盒子空着不放,共有()种不同的放法。


    正确答案:8

  • 第22题:

    给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素,请设计一个最坏时间复杂度为O(n)的算法,并对其时间复杂度进行分析说明。


    正确答案: 我们把这种算法叫做快速选择(quickselect)。令〡Si〡为Si中元素的个数,快速选择的步骤如下:
    1)如果〡S〡=1,那么k=1并将S中的元素作为答案返回。如果正在使用小数组的截止方法且〡S〡≤CUTOFF,则将S排序并返回第k个最小元。
    2)选取一个枢纽元v∈S。
    3)将集合S-{v}分割成S1和S2,就像快速排序中所做的那样。
    4)如果k≤〡S1〡,那么第K个最小元必然在S1中。在这种情况下,返回quickselect(S1,k),如果k=1+〡S1
    ,那么枢纽元就是第k个最小元,将它最为答案返回。否则,第k个最小元就在S2中,他是S2中的第(k-〡S1〡-1)个最小元。我们进行一次递归调用并返回quickselect(S2,k-〡S1〡-1)。
    与快速排序对比,快速选择只进行了一次递归调用而不是两次。快速选择的最坏情形和快速排序的相同,也就是O(N=2)。直观看来,这是因为快速排序的最坏情形发生在S1和S2有一个是空的时候;于是,快速选择也就不是真的节省一次递归调用。不过平均运行时间是O(N)。具体分析类似快速排序的分析。
    快速排序的实现甚至比抽象描述还要简单,当算法终止时,第k个最小元就在位置k-1上(因为数组开始于下标0)。这破坏了原来的排序;如果不希望这样,那么需要做一份拷贝。

  • 第23题:

    问答题
    给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素,请设计一个最坏时间复杂度为O(n)的算法,并对其时间复杂度进行分析说明。

    正确答案: 我们把这种算法叫做快速选择(quickselect)。令〡Si〡为Si中元素的个数,快速选择的步骤如下:
    1)如果〡S〡=1,那么k=1并将S中的元素作为答案返回。如果正在使用小数组的截止方法且〡S〡≤CUTOFF,则将S排序并返回第k个最小元。
    2)选取一个枢纽元v∈S。
    3)将集合S-{v}分割成S1和S2,就像快速排序中所做的那样。
    4)如果k≤〡S1〡,那么第K个最小元必然在S1中。在这种情况下,返回quickselect(S1,k),如果k=1+〡S1
    ,那么枢纽元就是第k个最小元,将它最为答案返回。否则,第k个最小元就在S2中,他是S2中的第(k-〡S1〡-1)个最小元。我们进行一次递归调用并返回quickselect(S2,k-〡S1〡-1)。
    与快速排序对比,快速选择只进行了一次递归调用而不是两次。快速选择的最坏情形和快速排序的相同,也就是O(N=2)。直观看来,这是因为快速排序的最坏情形发生在S1和S2有一个是空的时候;于是,快速选择也就不是真的节省一次递归调用。不过平均运行时间是O(N)。具体分析类似快速排序的分析。
    快速排序的实现甚至比抽象描述还要简单,当算法终止时,第k个最小元就在位置k-1上(因为数组开始于下标0)。这破坏了原来的排序;如果不希望这样,那么需要做一份拷贝。
    解析: 暂无解析