一起答
主观

阅读下列算法说明和算法,将应填入(n)处的语句写在对应栏内。

 【说明】

  为了减少直接插入排序关键字的比较次数,本算法使用了二分(折半)插入法对一个无序数组R[1..n]进行排序。排序思想是对一个待插入元素,先通过二分法(折半)找到插入位置,后移元素后将该元素插入到恰当位置。(假设R[]中的元素互不相同)

 [算法]

 1.变量声明

  X: Data Type

 i,j,low, high,mid,r:0..n

 2.每循环一次插入一个R[i]

 循环:i以1为步长,从2到n,反复执行。

 (1)准备

 X←R[i];(1); high←i-1;

 (2)找插入位置

 循环:当(2)时,反复执行。

      (3) 

    若X.key<R[mid].key

     则high←mid-1;

     否则 (4)  

 (3)后移

 循环:j以-1为步长,从(5),反复执行。

 R[j+1]←R[j]

 (4)插入

 R[low]←X

 3.算法结束

试题出自试卷《软件水平考试(初级)程序员下午(应用技术)模拟试卷30》
参考答案
查看试卷详情
相关试题
  1. 阅读以下说明和Java代码,回答问题1和问题2,将解答填写在对应栏内。

      【Java代码】

     class usethread implements (1) {

       int num

       usethread(int n){

         num=n;

       }

       public void (2) {

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

           System.out.println("running:"+num);

         System.out.println("finished:"+num);

       }

       public class multhread{

         public static void main(String args[]) (3) InterruptedException{

         Thread m1=new Thread(new usethread(1));

         Thread m2=new Thread(new usethread(2));

         m1.start();

         m2.start();

         m1.join();

         m2.join();

       }

     }

     【问题1】

     补充完整上面Java代码中(n)处。

     【问题2】

     写出上面Java代码运行的结果。

  2. 阅读以下说明及C++程序代码,将应填入(n)处的语句写在对应栏内。

      【说明】

     本程序的功能是实现任意两个大整数的乘法运算,例如:

     输入整数1:8934793850094505800243958034985058

     输入整数2:234584950989689084095803583095820923

     二者之积:

     209596817742739508050978890737675662366433464256830959194834854876 8534

     【C++代码】

     #include<iostream.h>

     const int MAXINPUTBIT=100;

     const int MAXRESULTBIT=500;

     class LargeNumber{

       int i,j;

       int temp;

       int one[MAXINPUTBIT+1];

       int onebit;  //one的位数

       int two[MAXINPUTBIT+1];

       int twobit;       //two的位数

       int result[MAXRESULTBIT+1];

     public:

       LargeNumber();

       ~LargeNumber();

       int inputone();     //出错返叫0,否则返回1

       int inputtwo();     //同上

       void multiplication(); //乘

       void clearresult();   //清零

       void showresult();   //显示

     };

     LargeNumber∷LargeNumber()

     {

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

       {

         one[i]=0;

         two[i]=0;

       }

       nebit=0;

       twobit=0;

       inputone();

       inputtwo();

     }

     LargeNumber∷~LargeNumber()

     {

     }

     int LargeNumber∷inputone()

     {

       char Number[MAXINPUTBIT+1];

       cout<<"Please enter one:";

       cin>>Number;

       i=0;

       j=MAXINPUTBIT;

       while(Number[i]!='\0')

         i++;

       nebit=i;

       for(i--;i>=0;i--,j--)

       {

         if(int(Number[i])>=48&&int(Number[i])<=57)

            (1);  //由字符转换为数字

         else

           return 0;

       }

       return 1;

     }

     int LargeNumber∷inputtwo()

     {

       char Number[MAXINPUTBIT+1];

       cout<<"Please enter two:";

       cin>>Number;

       i=0;

       j=MAXINPUTBIT;

       while(Number[i]!='\0')

         i++;

       twobit=i;

       for(i--;i>=0;i--,j--)

       {

         if(int(Number[i])>=48&&int(Number[i])<=57)

           two[j]=int(Number[i]-48);  //由字符转换为数字

         else

           return 0;

       }

       return 1;

     }

     void LargeNumber∷multiplication()  //乘法

     {

       clearresult();

       int m;

       for(i=MAXINPUTBIT;i>=0;i--)

       {

         temp=two[i];

         for(j=(2),m=MAXINPUTBIT;m>=0;m--,j--)

         {

           result[j]+=temp*one[m];

           if(result[j]>9)

           {

             result[j-1]+=result[j]/10;

              (3);

           }

         }

    &n

  3. 阅读以下说明和C语言函数,将应填入(n)处的语句写在对应栏内。

      【说明】

     著名的四色定理指出任何平面区域均可以用4种颜色着色,使相邻区域着不同的颜色。本程序对给定的区域图找出所有可能的不超过4种颜色的着色方案。

     【函数】

     # include <stdio.h>

     #define N 10 /*要着色的N个区域*/

     void output(int color[]) /*输出一种着色方案 color[i]的值为区域i所着颜色*/

     {

       int i;

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

         printf("%4d", color[i]);

       printf("\n");

     }

     int back(int *ip, int color[j] /*回溯*/

        int c=4;

        while (c==4)

        {

          if (*ip<=0)

            return 0:

          --(*ip);

        c=(1);

          color[*ip]=-1;

        }

        return c;

     }

     /*检查区域i,考查c种颜色的可能性 */

     int colorOK(iht i, int c, int adj[][N], int color[])

     {

       int j;

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

         if ((2))

           return 0;

       return 1;

     }

     /*为区域i选一种可着的颜色*/

     int select(int i, int c, int adj[][N], int color[])

     /*寻找各种着色方案 adj[i][j]=1表示区域i与区域j不相邻*/

     {

       int k;

       for (k=c; k<=4; k++) /*4种颜色*/

         if (colorOK((3)))

           return k;

       return 0;

     }

     int coloring(int adj[][N])

     {

       int color[N], i, c, cnt;

       for (i=0; i<N; i++) color[i]=-1:

       i=c=0; cnt=0;

       while (1)

       [

         if ((c=(4))==0)

           {

             c=back(&i, color);

               if (c==0)

                 return cnt;

            }

          else

          {

            (5);

            i++;

            if(i==N)

             {

                output(color);

                ++cnt;

                c=back(&i, color);

             }

            else

              c=0;

         }

       }

     }

     void main()

     {

       int adj[N][N]={ {0, 1, 0, 1, 1, 1, 1, 1, 1, 1},

              {1, 0, 1, 1, 0, 1, 1, 1, 1, 0},

              {0, 1, 0, 1, 0, 1, 1, 0, 1, 1},

              {1, 1, 1, 0, 1, 1, 0, 0, 1, 1},

              {1, 0, 0, 1, 0, 1, 0, 0, 0, 0},

              {1, 1, 1, 1, 1, 0, 1, 0, 0, 1},

              {1, 1, 1, 0, 0, 1, 0, 0, 1, 0},

              {1, 1, 0, 0, 0, 0, 0, 0, 1, 1},

             

  4. 阅读以下说明和C语言函数,将应填入(n)处的语句写在对应栏内。

      【说明】

     设串s和串t采用顺序存储结构,编写函数实现串s和串t的比较操作,要求比较结果包括大于、小于和等于3种情况。

     【函数】

      int StrCompare(SStrType s, SStrType t)

      {

       int n=s.length, m=(1), i,j,tag;

       i=0; j=0;

       while((2))

         {

           if((3))

            {

             i++;

             j++;

            }

           else if(s.str[i]>t.str[j])

          {

              tag=1;

              return tag;

            }

           else

            {

              tag=-1;

              return tag;

            }

         }

       if(n==m)

         tag=0;

       else if((4))

         tag=1;

       else if(n<m)

         tag=-1;

        (5);

     }

  5. 阅读下列算法说明和算法,将应填入(n)处的语句写在对应栏内。

     【说明】

      为了减少直接插入排序关键字的比较次数,本算法使用了二分(折半)插入法对一个无序数组R[1..n]进行排序。排序思想是对一个待插入元素,先通过二分法(折半)找到插入位置,后移元素后将该元素插入到恰当位置。(假设R[]中的元素互不相同)

     [算法]

     1.变量声明

      X: Data Type

     i,j,low, high,mid,r:0..n

     2.每循环一次插入一个R[i]

     循环:i以1为步长,从2到n,反复执行。

     (1)准备

     X←R[i];(1); high←i-1;

     (2)找插入位置

     循环:当(2)时,反复执行。

          (3) 

        若X.key<R[mid].key

         则high←mid-1;

         否则 (4)  

     (3)后移

     循环:j以-1为步长,从(5),反复执行。

     R[j+1]←R[j]

     (4)插入

     R[low]←X

     3.算法结束

  6. 阅读以下函数说明和C语言函数,将应填入(n)处的语句写在对应栏内。

    【函数2.1说明】

     有1、2、3、4四个数字,输出由这些数字组成的互不相同且无重、复数字的三位数。

     【函数2.1】

     main()

     {

     int i,j,k;

     printf("\n");

     for((1))   /*以下为三重循环*/

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

         for (k=1;k<5;k++)

           {

            if ((2))  /*确保i, j, k 三位互不相同*/

            printf("%d,%d,%d\n",i,j,k);

           }

     }

     【函数2.2说明】

     计算并输出100之内的素数,每行输出10个,超过10个则换行。

     【函数2.2】

     #include <stdio.h>

     #include "math.h"

     #define N 101

     main()

     {

     int i,j,line,a[N];

     for(i=2;i<N;i++)(3);

     for(i=2;i<sqrt(N);i++)

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

       {

         if(a[i]!=0&&a[j]!=0)

         if(a[j]%a[i]==0)

          (4);

       }

       printfC\n");

       for(i=2,line=0;i<N;i++)

       {

         if(a[i]!=0)

         {

         prinff("%5d",a[i]);

          (5);

         }

         if(line==10)

         {

           prinff("\n");

           line=0;

         }

       }

     }