zoukankan      html  css  js  c++  java
  • 2011蓝桥杯预赛若干题

    1.1.    代码填空(满分3分)

    假设a,b,c是3个互不相等的整数。下列代码取出它们中居中的数值,记录在m中。其中的swap()函数可以交换两个变量的值。请完善代码。

        if(a>b) swap(&a, &b);

        if(b>c) swap(&b, &c);

        if(a>b) swap(&a, &b);

        int m = b;

    因为经过第二次交换后b的值不一定大于a了

     

    1.2.    代码填空(满分5分)

    计算3个A,2个B可以组成多少种排列的问题(如:AAABB, AABBA)是《组合数学》的研究领域。但有些情况下,也可以利用计算机计算速度快的特点通过巧妙的推理来解决问题。下列的程序计算了m个A,n个B可以组合成多少个不同排列的问题。请完善它。

    int f(int m, int n)

    {

        if(m==0 || n==0) return 1;

        return f(n-1,m) + f(n,m-1);

    }

     

    #include <iostream>

    #include <cstring>

    #include <cstdlib>

    #include <cmath>

    using namespace std;

     

    /*

    递推求解

    (m+n)!/(m!n!) = (m+n)(m+n-1)(m+n-2)!/(m-1)!/(n-1)!

    */

    int f(int m, int n)

    {

        /*

        需要把 f(m-1,n-1)提到前面相乘,不能 ((m+n)*(m+n-1))/(m*n)*f(m-1,n-1),

        因为可能前面的除不尽,或者把mn改为double,或者按下面的这样

        */

        if(m==0 || n==0) return 1;

        return ((m+n)*(m+n-1)*f(m-1,n-1))/(m*n);

    }

     

    int main()

    {

        int i,j,k;

       

        cout<<f(2,7)<<endl;

        while(1);

        return 0;

    }

    1.3.    代码填空(满分6分)

    此段代码的意图是把一个缓冲区中的整数重新排列,使得所有负数都在正数的左边。请分析其工作流程,补充缺失的代码。

    void reorder(int *pData, int len)

    {

          if(pData == NULL || len == 0) return;

          int *pBegin = pData;

          int *pEnd =pData+len-1;

          while(pBegin < pEnd)

          {

                if(*pBegin<0)

                {

                      pBegin ++;

                      if(pEnd<=pBegin) break;

                }

                if(*pEnd>=0)

                {

                      pEnd --;

                      if(pEnd<=pBegin) break;

                }

     

                int temp = *pBegin;

                *pBegin = *pEnd;

                *pEnd = temp;

          }

    }

     

    int main(int argc, char **argv)

    {

        int a[] = {1,2,3,-5,-4,5,9,-8,-1};

        reorder(a, 9);

     

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

        printf("\n");

        return 0;  

    }

     

    1.4.    代码填空(满分9分)

    给定一个字符串,其含有的字符各不相同。程序输出该字符串的所有排列(全排列)情形。例如:给定字符串“xyz”,则程序输出:

    xyz

    xzy

    yxz

    yzx

    zyx

    zxy

    试完善程序中空缺的部分。

    void f(char *str, int len, int n)

    {  

        int i;  

        char tmp;  

        char *p = (char *)malloc(len+1);  

        if(n==len-1){  

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

        }else{  

            for(i=n;i<len;i++){  

                strcpy(p,str);  

     

                tmp = *(str+n);  

                *(str+n) = *(str+i);  

                *(str+i) = tmp;  

     

                f(str,len,n+1);  

                strcpy(str,p);  

            }  

        }  

        free(p);  

    }  

     

    int main(int argc, char **argv)

    {  

        char str[] = "xyz";  

        f(str,3,0);  

        printf("\n");  

        return 0;  

    }

     

    2011 模拟 c语言 高职

    1.5. 程序设计(满分 20 分)

    任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。

    比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。

     

    请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。循环圈的输出格式仿照:

    [82962, 75933, 63954, 61974]

    其中数字的先后顺序可以不考虑。

     

    解:这道题很不理解题意

     

  • 相关阅读:
    BasKet Note Pads 1.0 颁发
    为OpenOffice 2.4装置3D幻化结果
    Dolphin:KDE 中的文件操持器
    MySQL Administrator:MySQL 数据库经督工具
    gISOMount-ISO 映像文件挂载东西
    Seahorse:让加密更等闲
    Gmail Notifier:又一个 Gmail 邮件通知步调
    EasyTAG-音频文件 Tag 编辑器
    KAlarm:看护提示挨次
    文泉驿点阵宋体 0.8(嬴政)正式发布
  • 原文地址:https://www.cnblogs.com/hxsyl/p/3047655.html
Copyright © 2011-2022 走看看