蓝桥初赛参考题目填空题.docx

上传人:b****6 文档编号:7949300 上传时间:2023-05-12 格式:DOCX 页数:12 大小:20.32KB
下载 相关 举报
蓝桥初赛参考题目填空题.docx_第1页
第1页 / 共12页
蓝桥初赛参考题目填空题.docx_第2页
第2页 / 共12页
蓝桥初赛参考题目填空题.docx_第3页
第3页 / 共12页
蓝桥初赛参考题目填空题.docx_第4页
第4页 / 共12页
蓝桥初赛参考题目填空题.docx_第5页
第5页 / 共12页
蓝桥初赛参考题目填空题.docx_第6页
第6页 / 共12页
蓝桥初赛参考题目填空题.docx_第7页
第7页 / 共12页
蓝桥初赛参考题目填空题.docx_第8页
第8页 / 共12页
蓝桥初赛参考题目填空题.docx_第9页
第9页 / 共12页
蓝桥初赛参考题目填空题.docx_第10页
第10页 / 共12页
蓝桥初赛参考题目填空题.docx_第11页
第11页 / 共12页
蓝桥初赛参考题目填空题.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

蓝桥初赛参考题目填空题.docx

《蓝桥初赛参考题目填空题.docx》由会员分享,可在线阅读,更多相关《蓝桥初赛参考题目填空题.docx(12页珍藏版)》请在冰点文库上搜索。

蓝桥初赛参考题目填空题.docx

蓝桥初赛参考题目填空题

c语言参考题目---填空题

1.代码填空

若是只提供加减乘除的大体运算能力,你能实现求平方根吗?

能够的!

先随意猜一个根,用它试除目标数字,若是结果恰好等于所猜的数,那么问题解决。

不然用结果与所猜的数字的平均值再去试除….

假设待开方的数字为doublea;

doublet=a/2;

doublet2;

for(;;){

t2=a/t;

if(fabs(t-t2)<0.001)break;

t=_________;

}

答案:

(t+t2)/2

注意:

(t+t2)/2.0,(t2+t)*0.5都算对的。

2.代码填空

以下代码把一个串p复制到新的位置q。

请填写缺少的语句;

char*p="abcde";

char*q=(char*)malloc(strlen(p)+1);

for(inti=0;____i<=strlen(p)_________;i++)q[i]=p[i];

参考答案:

i<=strlen(p)

注意:

关键是<=不能写成<,但i

3.代码填空

“考拉兹猜想”(又称3n+1猜想、角谷猜想、哈塞猜想、乌拉姆猜想或叙拉古猜想)和“哥德巴赫猜想”一样目前尚未用数学方式证明其完全成立。

在1930年,德国汉堡大学的学生考拉兹,曾经研究过那个猜想,因此得名。

在1960年,日本人角谷静夫也研究过那个猜想。

该猜想的表达十分简单:

从任何一个正整数n动身,假设是偶数就除以2,假设是奇数就乘3再加1,如此继续下去,通过有限步骤,总能取得1。

例如:

17-52-26-13-40-20-10-5-16-8-4-2-1

该猜想尽管没有完全证明,但用运算机验证有限范围的数字却十分容易。

以下是验证的代码,请补全缺少的部份。

for(intn=2;n<=10000;n++)

{

intm=n;

for(;;)

{

if(____________)

m=m/2;

else

m=m*3+1;

if(m==1)

{

printf("%dok!

\n",n);

break;

}

}

};

参考答案:

m%2==0

注意:

(m%2)==0固然也正确。

 

4.代码填空

1+3=4,1+3+5=9,1+3+5+7=16它们的结果都是平方数。

这是偶然的巧合吗?

下面代码验证关于累加至1000之内的情形都成立。

试完善之。

intn=1;

for(inti=1;i<1000/2;i++)

{

n+=2*i+1;

intm=______________;

if(m*m!

=n)

{

printf("加至%d时不成立!

\n",2*i+1);

break;

}

}

参考答案:

i+1

5.代码填空

给定一个串,例如“abcdefg”,咱们希望求出它的反转串,即:

“gfedcba”。

以下代码实现反转,请补充空白的部份。

charp[]="abcdef";

for(inti=0;__________________;i++)

{

chart=p[i];

p[i]=p[strlen(p)-1-i];

p[strlen(p)-1-i]=t;

}

参考答案:

i

注意:

不能写成<=

6.代码填空

生活中人们往往靠直觉来进行粗略的判定,但有的时候直觉往往很不靠得住。

比如:

若是你们班有30名同窗,那么显现同一天生日的概率有多大呢?

你可能不相信,那个概率高达70%左右。

以下的程序确实是用运算机随机模拟,再统计结果。

认真阅读代码,补全空白的部份。

#defineN30

......

inta[N];

srand(time(NULL));

intn=0;

for(intk=0;k<10000;k++)

{

for(inti=0;i

a[i]=rand()%365;

booltag=false;//假设没有相同

for(i=1;i

{

for(intj=0;j

{

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

{

tag=true;

break;

}

}

_____________________;

}

if(tag)n++;

}

printf("%f\n",1.0*n/10000*100);

答案:

if(tag)break

固然,if(tag==true)if(tag!

=false)都是可能的写法。

7.代码填空

假设a,b,c是3个互不相等的整数。

以下代码掏出它们中居中的数值,记录在m中。

其中的swap()函数能够互换两个变量的值。

请完善代码。

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

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

______________________;

intm=b;

参考答案:

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

注意:

a>b也可写为b

swap(&a,&b)写为:

swap(&b,&a)也是对的。

 

8.代码填空

给定一个串,例如“aabbbcddddkkkmmmmaakkkk”咱们希望去掉持续的重复字母,得出串:

“abcdkmak”,下面代码实现了该功能,请完善之。

char*p="aabbbcddddkkkmmmmaakkkk";

charbuf[100];

char*q=p;

inti=0;

for(;*q;)

{

if(___________||*q!

=*(q-1))

{

buf[i++]=*q;

}

q++;

}

buf[i]='\0';

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

参考答案:

q==p

注意:

p==q也是正确的

9.代码填空

口袋中有5只红球,4只白球。

随机从口袋中掏出3个球,那么掏出1个红球2个白球的概率是多大?

类似如此的数学问题,在计算的时候往往十分复杂。

但如果是通过运算机模拟那个进程,比如进行100000次取球模拟,统计一下指定情形显现的次数对运算机来讲是方便且快速的。

一样,那个原理也适用于像天气预报如此复杂的系统进程。

以下的程序确实是用于解决取球概率问题的。

认真阅读代码,补全空白的部份。

srand((unsigned)time(NULL));

intn=0;

for(inti=0;i<100000;i++)

{

charx[]={1,1,1,1,1,2,2,2,2};

inta=0;//取到的红球的数量

intb=0;//取到的白球的数量

for(intj=0;j<3;j++)

{

intk=rand()%(9-j);

if(x[k]==1)

a++;

else

b++;

_______________________;

}

if(a==1&&b==2)n++;

}

printf("概率=%f\n",n/100000.0*100);

答案:

x[k]=x[9-j-1]

固然,9-1-j9-(j+1)9-(1+j)都是可能的写法。

 

10.代码填空

以下代码把一个二进制的串转换为整数。

请填写缺少的语句;

intn=0;

for(inti=0;i

{

n=__________________;

}

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

参考答案:

n*2+(p[i]-'0')

注意:

加法减法的顺序能够灵活,乘法能够互换,也能够n+n;

p[i]能够写为*(p+i)

'0'能够写为48

11.代码填空

数列:

Sn=1+1/2+1/3+…1/n被称为调和数列,它“恰好”是不收敛的。

那个数列和增加的速度是惊人缓慢的。

以下代码求出n至少为多大,才能保证Sn>m。

试完善之。

doublem=20;

doublex=1;

inti=2;

while(x

{

x+=______________;

}

printf("%d",i);

参考答案:

1.0/i++

注意:

1.0错写为1那么扣除3分

1.0写为1d或1f或(double)1或(float)1都能够算正确

12.代码填空

仍一枚硬币,正面和反面向上的概率都是0.5,但多次仍硬币,总会显现持续多次同一面的情形。

咱们把每次的实验结果记录下来,形成一个串(0,1别离代表正面、反面向上)。

下面的程序统计出0或1最大持续显现的次数。

试完善之。

intlen=strlen(p);

intmax_k=1;

intk=1;

for(inti=1;i

{

if(p[i]==p[i-1])

k++;

else

{

_________________________;

k=1;

}

}

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

参考答案:

if(k>max_k)max_k=k

if(max_k

13.代码填空

形如:

“abccba”,“abcba”的串称为回文串,以下代码判定一个串是不是为回文串。

请补充空白的部份。

charbuf[]="abcde11edcba";

intx=1;

for(inti=0;i

if(___________________)

{

x=0;

break;

}

printf("%s\n",x?

"是":

"否");

参考答案:

buf[i]!

=buf[strlen(buf)-1-i]

注意:

!

=前后互换能够。

减法互换能够

buf[i]等价于*(buf+i)

A!

=B等价于!

(A==B)

14.代码填空

计算3个A,2个B能够组成多少种排列的问题(如:

AAABB,AABBA)是《组合数学》的研究领域。

但有些情形下,也能够利用运算机计算速度快的特点通过巧妙的推理来解决问题。

以下的程序计算了m个A,n个B能够组合成多少个不同排列的问题。

请完善它。

intf(intm,intn)

{

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

return_______________________;

}

答案:

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

固然,加法互换是能够的

15.代码填空

因数分解是十分大体的数学运算,应用普遍。

下面的程序对整数n(n>1)进行因数分解。

比如,n=60,那么输出:

2235。

请补充缺失的部份。

voidf(intn)

{

for(inti=2;i

{

____________________

{

printf("%d",i);

n=n/i;

}

}

if(n>1)printf("%d\n",n);

}

参考答案:

while(n%i==0)

注意:

for(;n%i==0;)逻辑上也是正确的,但中间显现分号,与说明相违。

16.代码填空

以下代码实现把一个串“轮换”拷贝。

既是:

把"abcdef"拷贝为:

"bcdefa"。

请补充缺少的语句。

char*p="abcdef";

char*q=(char*)malloc(strlen(p)+1);

for(inti=0,intlen=strlen(p);i

q[i]=p[i+1];

q[len-1]=p[0];

_____________________;

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

参考答案:

q[len]='\0'

注意:

q[len]=0也是对的。

固然:

q[len]写为:

q[strlen(p)]也对

 

17.代码填空

穷举法是运算机解决某些问题的重要手腕。

为了估算可能性的数量,常常需要计算组合或排列的数量,下面的代码输出从m个物体中任掏出n个物体的不同方案的数量(此处假设:

m,n>1且m>=n)。

试完善之。

intf(intm,intn)

{

inta=1;

intm1=m;

______________

a*=m1--;

intb=1;

while(n>1)

b*=n--;

returna/b;

}

参考答案:

while(m1>m-n)

固然,while(m1>=m-n+1)也是对的。

18.代码填空

任意给定一个4位数(不能所有位都相同),比如:

3278,从头组合出最大数:

8723,再从头组合出最小数:

2378,相减,取得新的4位数(如不足那么补0),重复那个进程,最后必然取得一个数字:

6174。

那个现象被称为:

数字黑洞。

下面的函数实现由给定的4位整数求出下一个整数的功能。

请完善之。

intf(intn)

{

intN[4];

for(inti=0;i<4;i++)

{

N[3-i]=n%10;

___________________;

}

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

for(intj=0;j<3-i;j++)

if(N[j]>N[j+1])

{

intt=N[j+1];

N[j+1]=N[j];

N[j]=t;

}

intn_min=0;

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

n_min=n_min*10+N[i];

intn_max=0;

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

n_max=n_max*10+N[i];

returnn_max-n_min;

}

参考答案:

n=n/10

注意:

也能够写成n/=10

19.代码填空

公交车票价为5角。

假设每位乘客只持有两种币值的货币:

5角、1元。

再假设持有5角的乘客有m人,持有1元的乘客有n人。

由于特殊情形,开始的时候,售票员没有零钱可找。

咱们想明白这m+n名乘客以什么样的顺序购票那么能够顺利完成购票进程。

显然,m=n的时候,有些情形也不行。

比如,第一个购票的乘客就持有1元。

下面的程序计算出这m+n名乘客所有可能顺利完成购票的不同情形的组合数量。

注意:

只关切5角和1元交替显现的顺序的不同排列,持有一样币值的两名乘客互换位置并非算做一种新的情形来计数。

//m:

持有5角币的人数

//n:

持有1元币的人数

//返回:

所有顺利完成购票进程的购票顺序的种类数

intf(intm,intn)

{

if(m

if(n==0)return1;

return_______________________;

}

答案:

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

加法互换后也正确

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2