标题 错误票据c语言,内含答案的 -- 2013蓝桥杯C语言本科组B.doc

44cb7578e1df5412b94317daaa3307ba.gif内含答案的 -- 2013蓝桥杯C语言本科组B.doc

下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。

2.下载的文档,不会出现我们的网址水印。

3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。

文档包含非法信息?点此举报后获取现金奖励!

下载文档到电脑,查找使用更方便

15

积分

还剩页未读,继续阅读

关 键 词:内含答案的

-

2013蓝桥杯C语言本科组B

内含

答案

2013

蓝桥杯

语言

本科

资源描述:

2013蓝桥杯C语言本科组B

1、题目标题: 高斯日记(满分4分)

大数学家高斯有个好习惯:无论如何都要记日记。

他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210

后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?

高斯出生于:1777年4月30日。

在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。

高斯获得博士学位的那天日记上标着:8113

请你算出高斯获得博士学位的年月日。

提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21

答案:1799-7-16(本题拿电脑的计算器算的)

2、题目标题: 马虎的算式(满分5分)

小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。

有一次,老师出的题目是:36 x 495 = ?

他却给抄成了:396 x 45 = ?

但结果却很戏剧性,他的答案竟然是对的!!

因为 36 * 495 = 396 * 45 = 17820

类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54

假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)

能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?

答案:142种

#includeint main()

{

int a,b,c,d,e;

int sum=0;

for(a=1;a<10;a++)

for(b=1;b<10;b++)

for(c=1;c<10;c++)

for(d=1;d<10;d++)

for(e=1;e<10;e++)

if((10*a+b)*(100*c+10*d+e)==(a*100+d*10+b)*(c*10+e)&&a!=b&&a!=c&&a!=d&&a!=e&&b!=c&&b!=d&&b!=e&&c!=d&&c!=e&&d!=e)

{

sum++;

printf("%3d,%3d,%3d,%3d,%3d\n",a,b,c,d,e);

}

printf("%4d种\n",sum);

}

请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。

满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。

答案:142种

#includeint main()

{

int a,b,c,d,e;

int sum=0;

for(a=1;a<10;a++)

for(b=1;b<10;b++)

for(c=1;c<10;c++)

for(d=1;d<10;d++)

for(e=1;e<10;e++)

if((10*a+b)*(100*c+10*d+e)==(a*100+d*10+b)*(c*10+e)&&a!=b&&a!=c&&a!=d&&a!=e&&b!=c&&b!=d&&b!=e&&c!=d&&c!=e&&d!=e)

{

sum++;

printf("%3d,%3d,%3d,%3d,%3d\n",a,b,c,d,e);

}

printf("%4d种\n",sum);

}

3、题目标题: 第39级台阶(满分8分)

小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!

站在台阶前,他突然又想着一个问题:

如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?

请你利用计算机的优势,帮助小明寻找答案。

解答:

/有左右脚的限制,即第一步必须左脚,然后左右交替,最后一步必须是右脚。即必须走偶数步。

#include//有左右脚的限制。

const int N=39;

int f(int m,int n)

{

if(m==0||n==0)

return 1;

return(f(m-1,n)+f(m,n-1));//递归的关键在此,大规模逐渐转化为小规模。

}

int main()

{

int x=N/2,y;//x表示走两步的次数,y表示走一步的次数。

int i,sum=0;

for(i=x;x>=0;x-=2)//为了保持偶数步,必须x每次递减2,而不是1;(x要x>=0,不能x>0),x=0是针对偶数台阶。

{

y=N-2*x;

sum+=f(x,y);//求组合数;

}

cout<

#includechar* prefix(char* haystack_start, char* needle_start)

{

char* haystack = haystack_start;

char* needle = needle_start;

while(*haystack && *needle)

{

if(*(needle++)!=*(haystack++)) return NULL; //填空位置

}

if(*needle) return NULL;

return haystack_start;

}

int main()

{

char needle_start[100]={"abc"},haystack_start[100]={"abc123"};

if(prefix(haystack_start,needle_start))

cout<0){

int t = x[right];

x[right] = x[p];

x[p] = t;

right--;

}

else{

P++; //填空位置

}

}

}

如果给定数组:

25,18,-2,0,16,-5,33,21,0,19,-16,25,-3,0

则排序后为:

-3,-2,-16,-5,0,0,0,21,19,33,25,16,18,25

答案:

#include#includevoid sort3p(int* x, int len);

int main()

{

int a[14]={0},i;

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

scanf("%3d",&a[i]);

sort3p(a,14);

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

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

return 0;

}

void sort3p(int* x, int len)

{

int p = 0;

int left = 0;

int right = len-1;

while(p<=right)

{

if(x[p]<0)

{

int t = x[left];

x[left] = x[p];

x[p] = t;

left++;

p++;

}

else if(x[p]>0)

{

int t = x[right];

x[right] = x[p];

x[p] = t;

right--;

}

else

{

p++; //填空位置

}

}

}

7、题目标题:错误票据(满分4分)

某涉密单位下发了某种票据,并要在年终全部收回。

每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。

因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。

你的任务是通过编程,找出断号的ID和重号的ID。

假设断号不可能发生在最大和最小号。

要求程序首先输入一个整数N(N<100)表示后面数据行数。

接着读入N行数据。

每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000)

每个整数代表一个ID号。

要求程序输出1行,含两个整数m n,用空格分隔。

其中,m表示断号ID,n表示重号ID

例如:

用户输入:

2

5 6 8 11 9

10 12 9

则程序输出:

7 9

再例如:

用户输入:

6

164 178 108 109 180 155 141 159 104 182 179 118 137 184 115 124 125 129 168 196

172 189 127 107 112 192 103 131 133 169 158

128 102 110 148 139 157 140 195 197

185 152 135 106 123 173 122 136 174 191 145 116 151 143 175 120 161 134 162 190

149 138 142 146 199 126 165 156 153 193 144 166 170 121 171 132 101 194 187 188

113 130 176 154 177 120 117 150 114 183 186 181 100 163 160 167 147 198 111 119

则程序输出:

105 120

资源约定:

峰值内存消耗 < 64M

CPU消耗 < 1000ms

答案:(忘记了,不过简单)

8、题目标题:翻硬币(满分10分)

小明正在玩一个“翻硬币”的游戏。

桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。

比如,可能情形是:**oo***oooo

如果同时翻转左边的两个硬币,则变为:oooo***oooo

现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?

我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求:

程序输入:

两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度<1000

程序输出:

一个整数,表示最小操作步数

例如:

用户输入:

**********

o****o****

程序应该输出:

5

再例如:

用户输入:

*o**o***o***

*o***o**o***

程序应该输出:

1

资源约定:

峰值内存消耗 < 64M

CPU消耗 < 1000ms

//翻银币问题,求最小翻转数。

#include#include#includevoid turn(char *c,int k)

{

int j;

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

{

if(c[j]==*)

{

c[j]=o;

continue;

}

if(c[j]==o)

{

c[j]=*;

continue;

}

}

}

void handle(char *a,char *b)

{

int i,count=0;

char c[100];

strcpy(c,a);//c用来暂时代替a,以防a以后有用。

for(i=0;c[i]!=\0;i++)//????????????

if(c[i]!=b[i])

{

turn(c,i);

count++;

}

cout<

#includeint handle(int *a,int i,int j)

{

int b[100]={0};

int k,p,t=0;

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

b[t++]=a[k];//保留 t

for(k=0;kb[p])

{

int s=b[k];

b[k]=b[p];

b[p]=s;

}

for(k=0;km||a[i]<1)

scanf("%3d",&a[i]);

}

f(a,m);

return 0;

}

展开阅读全文

温馨提示:

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。

2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。

3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。

4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。

5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。

6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。

7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

bb6249c6567dd4384e6ab3556cfc22ed.gif 

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

关于本文

本文标题:内含答案的 -- 2013蓝桥杯C语言本科组B.doc

链接地址:https://www.renrendoc.com/p-70274229.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值