国信蓝点杯第二届(2011)C语言大赛样题整合

http://blog.sina.com.cn/s/blog_44e1ec3801018d3r.html

国信蓝点杯第二届(2011)C语言大赛样题整合(2012-12-26 08:49:16)

比赛的编程环境是VC++6.0,但不可使用C++语句。

 

 

2011 模拟 c语言 高职

注意:

本套模拟题主要模拟命题形式与考核范围。真实竞赛题的数量、难度可能与此套模拟题有差异。

说明:

本试卷包含两种题型:“代码填空”与“程序设计”。

填空题要求参赛选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确、完整。所填写的代码不多于一条语句(即不能出现分号)。

编程题要求选手设计的程序对于给定的输入能给出正确的输出结果。注意:在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。选手的程序必须是通用的,不能只对试卷中给定的数据有效。

 

1.      代码填空(满2分)

形如:“abccba”,“abcba”的串称为回文串,下列代码判断一个串是否为回文串。请补充空白的部分。

char buf[] = "abcde11edcba";

int x = 1;

for(int i=0; i

     if(___________________)

     {

         x = 0;

         break;

     }

printf("%s\n", x ? "是":"否");

 

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

下列代码把一个二进制的串转换为整数。请填写缺少的语句;

char* p = "1010110001100";

int n = 0;

for(int i=0;i

{

     n = __________________;

}

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

 

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

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

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

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

    ______________________;

    int m = b;

 

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

下面函数的目的是求出某个日期是该年度的第几天。试完善之。

如果传入:year=1980,month=1, day=1

则返回 1

如果传入:year=1980,month=2, day=1

则返回 32

int getDayOfYear(int year, int month, int day)

{

        int days _____________________;

        int flag =(year%4==0 && year0!=0) || year@0 == 0 ? 1 : 0;

        int sum = day ;

        for(int i=0;i

            sum += days[flag][i];

            

        return sum;    

}

 

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

计算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(m--,n)*(m+n)/m;

}

 

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

(a+b)的n次幂的展开式中各项的系数很有规律,对于n=2,3,4时分别是:1 2 1, 1 3 3 1,1 4 6 4 1。这些系数构成了著名的杨辉三角形:

                 1

                1

              1

               1

             1

        10  10    1

 

下列的程序给出了计算第m层的第n个系数的计算方法,试完善之(m,n都从0算起)。

    int f(int m, int n)

    {

        if(m==0) return 1;

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

        return f(n--)*(m-n)/n;

    }

 

7.      程序设计(满分15分)

从键盘输入一个整数(1~20)

则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如:

输入数字2,则程序输出:

1 2

4 3

输入数字3,则程序输出:

1 2 3

8 9 4

7 6 5

输入数字4, 则程序输出:

   4

12  13  14  5

11  16  15  6

10    7

 

8.      程序设计(满分9分)

从键盘输入一个日期,格式为yyyy-M-d

要求计算该日期与1949年10月1日距离多少天

例如:

用户输入了:1949-10-2

程序输出:1

用户输入了:1949-11-1

程序输出:31

 

 

9.      程序设计(满分 12 分)

当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。

该校验的过程:

1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。

2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。

3、将奇数位总和加上偶数位总和,结果应该可以被10整除。

例如,卡号是:5432123456788881

则奇数、偶数位(用红色标出)分布:5432123456788881

奇数位和=35

偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和=35。

最后35+35=70 可以被10整除,认定校验通过。

 

请编写一个程序,从键盘输入卡号,然后判断是否校验通过。通过显示:“成功”,否则显示“失败”。

比如,用户输入:356827027232780

程序输出:成功

 

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

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

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

 

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

[82962, 75933, 63954, 61974]

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

 

 

 

 

2011 模拟 c语言 本科

注意:

本套模拟题主要模拟命题形式与考核范围。真实竞赛题的数量、难度可能与此套模拟题有差异。

说明:

本试卷包含两种题型:“代码填空”与“程序设计”。

填空题要求参赛选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确、完整。所填写的代码不多于一条语句(即不能出现分号)。

编程题要求选手设计的程序对于给定的输入能给出正确的输出结果。注意:在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。选手的程序必须是通用的,不能只对试卷中给定的数据有效。

 

1.      代码填空(满分2分)

下列代码,把一个2位整数交换十位与个位的位置。请填写缺失的代码。

例如:当x=95时,返回59。

int switch_num(int x)

{

    int a = x / 10;

    int b = x % 10;

    return __________________;

}

 

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

下列代码把一个二进制的串转换为整数。请填写缺少的语句;

char* p = "1010110001100";

int n = 0;

for(int i=0;i

{

     n = __________________;

}

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

 

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

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

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

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

    ______________________;

    int m = b;

 

4.      代码填空(满分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 _______________________;

}

 

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

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

void reorder(int *pData, int len)

{

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

      int *pBegin = pData;

      int *pEnd = __________;

      while(pBegin < pEnd)

      {

            if(*pBegin<0)

            {

                  pBegin ++;

                  __________;

            }

            if(*pEnd>=0)

            {

                  pEnd --;

                  ___________;

            }

 

            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;  

}

 

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

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

xyz

xzy

yxz

yzx

zyx

zxy

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

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

 

    int i;  

    char tmp;  

    char *p = (char *)malloc(__________);  

    if(n==len-1){  

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

    }else{  

        for(i=n;i

            strcpy(p,str);  

 

            tmp = *(str+n);  

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

            *(str+i) = tmp;  

 

            _______________;  

            strcpy(str,p);  

        

    

    free(p);  

 

 

int main(int argc, char **argv)

 

    char str[] = "xyz";  

    f(str,3,0);  

    printf("\n");  

    return 0;  

}

7.      代码设计(满分5分)

(数据类型应为long)625这个数字很特别,625的平方等于390625,刚好其末3位是625本身。除了625,还有其它的3位数有这个特征吗?

请编写程序,寻找所有这样的3位数:它的平方的末3位是这个数字本身。

输出结果中,从小到大,每个找到的数字占一行。比如那个625就输出为:

625

 

8.      代码设计(满分11分)

(树)某游戏规则中,甲乙双方每个回合的战斗总是有一方胜利,一方失败。游戏规定:失败的一方要把自己的体力值的1/4加给胜利的一方。例如:如果双方体力值当前都是4,则经过一轮战斗后,双方的体力值会变为:5,3。

现在已知:双方开始时的体力值甲:1000,乙:2000。

假设战斗中,甲乙获胜的概率都是50%

求解:双方经过4个回合的战斗,体力值之差小于1000的理论概率。

 

9.      代码设计(满分18分)

整数的分划问题。

如,对于正整数n=6,可以分划为:

6

5+1

4+2, 4+1+1

3+3, 3+2+1, 3+1+1+1

2+2+2, 2+2+1+1, 2+1+1+1+1

1+1+1+1+1+1+1

现在的问题是,对于给定的正整数n,编写算法打印所有划分。

用户从键盘输入 n (范围1~10)

程序输出该整数的所有划分。

 

10. 代码设计(满分20分)

一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。

例如:

当N=3时,153就满足条件,因为 1^3 + 5^3 + 3^3 = 153,这样的数字也被称为水仙花数(其中,“^”表示乘方,5^3表示5的3次方,也就是立方)。

当N=4时,1634满足条件,因为 1^4 + 6^4 + 3^4 + 4^4 = 1634。

当N=5时,92727满足条件。

实际上,对N的每个取值,可能有多个数字满足条件。

程序的任务是:求N=21时,所有满足条件的花朵数。注意:这个整数有21位,它的各个位数字的21次方之和正好等于这个数本身。

如果满足条件的数字不只有一个,请从小到大输出所有符合条件的数字,每个数字占一行。因为这个数字很大,请注意解法时间上的可行性。要求程序在3分钟内运行完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值