蓝桥杯模拟题含本科高职cc++Word文档下载推荐.docx
- 文档编号:18292913
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:23
- 大小:24.69KB
蓝桥杯模拟题含本科高职cc++Word文档下载推荐.docx
《蓝桥杯模拟题含本科高职cc++Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《蓝桥杯模拟题含本科高职cc++Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
if(b>
c)swap(&
b,&
c);
-+______________________;
intm=b;
1.4.代码填空(满分5分)
计算3个A,2个B可以组成多少种排列的问题(如:
AAABB,AABBA)是《组合数学》的研究领域。
但有些情况下,也可以利用计算机计算速度快的特点通过巧妙的推理来解决问题。
下列的程序计算了m个A,n个B可以组合成多少个不同排列的问题。
请完善它。
intf(intm,intn)
if(m==0||n==0)return1;
return_______________________;
1.5.代码填空(满分6分)
此段代码的意图是把一个缓冲区中的整数重新排列,使得所有负数都在正数的左边。
请分析其工作流程,补充缺失的代码。
voidreorder(int*pData,intlen)
if(pData==NULL||len==0)return;
int*pBegin=pData;
int*pEnd=____________;
while(pBegin<
pEnd)
if(*pBegin<
0)
pBegin++;
__________;
if(*pEnd>
=0)
pEnd--;
___________;
inttemp=*pBegin;
*pBegin=*pEnd;
*pEnd=temp;
intmain(intargc,char**argv)
inta[]={1,2,3,-5,-4,5,9,-8,-1};
reorder(a,9);
i<
9;
i++)printf("
%d"
a[i]);
\n"
);
return0;
1.6.代码填空(满分9分)
给定一个字符串,其含有的字符各不相同。
程序输出该字符串的所有排列(全排列)情形。
给定字符串“xyz”,则程序输出:
xyz
xzy
yxz
yzx
zyx
zxy
试完善程序中空缺的部分。
voidf(char*str,intlen,intn)
{
inti;
chartmp;
char*p=(char*)malloc(__________);
strlen(str)+1
if(n==len-1){
printf("
%s\n"
str);
}else{
for(i=n;
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);
}
charstr[]="
xyz"
f(str,3,0);
1.7.代码设计(满分5分)
625这个数字很特别,625的平方等于390625,刚好其末3位是625本身。
除了625,还有其它的3位数有这个特征吗?
请编写程序,寻找所有这样的3位数:
它的平方的末3位是这个数字本身。
输出结果中,从小到大,每个找到的数字占一行。
比如那个625就输出为:
625
#include"
stdio.h"
stdlib.h"
string.h"
voidmain()
intnum,n;
for(num=100;
num<
1000;
num++)
n=num*num;
if(n%1000==num)
printf("
num);
1.8.代码设计(满分11分)
某游戏规则中,甲乙双方每个回合的战斗总是有一方胜利,一方失败。
游戏规定:
失败的一方要把自己的体力值的1/4加给胜利的一方。
如果双方体力值当前都是4,则经过一轮战斗后,双方的体力值会变为:
5,3。
现在已知:
双方开始时的体力值甲:
1000,乙:
2000。
假设战斗中,甲乙获胜的概率都是50%
求解:
双方经过4个回合的战斗,体力值之差小于1000的理论概率。
#include<
math.h>
voidf(doublea,doubleb,int*m,int*n,intk)
doubleta=a,tb=b;
if(k==0)
(*n)++;
if(fabs(a-b)<
1000.0)
(*m)++;
result%lf,%lf,%d,%d\n"
ta,tb,*m,*n);
return;
tb+=ta*1.0/4.0;
ta*=3.0/4.0;
k=%d,a=%lf,b=%lf,alost"
k,ta,tb);
f(ta,tb,m,n,k-1);
a+=b*1.0/4.0;
b*=3.0/4.0;
k=%d,a=%lf,b=%lf,awin"
f(a,b,m,n,k-1);
voidmain()
doublea=1000,b=2000;
intm=0,n=0;
f(a,b,&
m,&
n,4);
m=%dn=%d\n"
m,n);
%f\n"
(float)m/n);
getch();
1.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)
程序输出该整数的所有划分。
stdio.h>
#definelen10
Intd[len],n,total,k;
Voiddigui(intp)
Inti,j;
if(total==n)
for(j=0;
j<
k;
j++)
%d"
d[j]);
if(j<
k-1)
putchar('
+'
else
if(n-d[0]==k-1)
\n'
else
"
for(i=p;
i>
=1;
i--)
if(i+total<
=n)
d[k++]=i;
total+=i;
digui(i);
total-=d[k-1];
k--;
Intmain(void)
while(scanf("
&
n)==1)
total=k=0;
digui(n);
Return0;
1.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分钟内运行完毕。
逐一穷举:
IntN;
Voidfen(unsignedlongintx)
Unsignedlongintarr[21]={0},p,n=1,y=0;
Inti=0,j=0,count;
p=x;
while(x)
arr[i]=x%10;
for(count=0;
count<
N;
count++)
n*=arr[i];
y+=n;
n=1;
x=x/10;
i++;
if(p==y)
p);
Voidmain()
Unsignedlongintnum=1,temp;
Inti,j=0;
inputN:
scanf("
N);
clock_tbegin_time,end_time;
begin_time=clock();
for(i=1;
i++)
num=num*10;
temp=num*10;
for(;
temp;
fen(num);
end_time=clock();
\nTimeelapsed:
%.3lf(ms)\n"
(double)(end_time-bein_time));
方法二:
time.h>
intnum_time[10]={0};
/*num_time[10]用来得到0-9数字出现的个数*/
intsum[10][21]={{0}},sumc[10][21]={{0}};
/*sum数组用来计算出0-9的21次方。
sumc用来计算数字出现次数*它的21次方*/
intcount=0;
/*计算得到几个水仙花数了,得到2个以后就结束程序*/
voidinitProgramm()/*这个函数用来获得0-9的21次方,存在sum数组里*/
inti,j,k;
for(i=0;
10;
i++)
sum[i][20]=i;
for(k=2;
k<
k++)
for(i=1;
21;
for(j=20;
j>
=0;
j--)
sum[k][j]*=k;
0;
sum[k][j-1]+=sum[k][j]/10;
sum[k][j]%=10;
voidcheck(inti0,inti1,inti2,inti3,inti4,inti5,inti6,inti7,inti8,inti9)/*检测数字是不是水仙花数*/
inti,j;
intgetAdd[21]={0};
intj1=0,j2=0,j3=0,j4=0,j5=0,j6=0,j7=0,j8=0,j9=0,j0=0;
for(j=0;
j++)/*把数字出现次数*它的21次方*/
sumc[1][j]=sum[1][j]*i1;
sumc[2][j]=sum[2][j]*i2;
sumc[3][j]=sum[3][j]*i3;
sumc[4][j]=sum[4][j]*i4;
sumc[5][j]=sum[5][j]*i5;
sumc[6][j]=sum[6][j]*i6;
sumc[7][j]=sum[7][j]*i7;
sumc[8][j]=sum[8][j]*i8;
sumc[9][j]=sum[9][j]*i9;
i++)/*进位*/
sumc[i][j-1]+=sumc[i][j]/10;
sumc[i][j]%=10;
i++)/*得到一个数每位的21次方的和,就是把sumc叠加起来*/
getAdd[j]+=sumc[i][j];
for(i=20;
i--)/*进位*/
getAdd[i-1]+=getAdd[i]/10;
getAdd[i]%=10;
i--)/*用来判断和里面每个数字出现的次数*/
switch(getAdd[i])
case0:
j0++;
break;
case1:
j1++;
case2:
j2++;
case3:
j3++;
case4:
j4++;
case5:
j5++;
case6:
j6++;
case7:
j7++;
case8:
j8++;
case9:
j9++;
/*如果一个数字,和里0-9出现的次数与这个数字里0-9出现的次数相同,那么和就应该是水仙花数(第一位数字不能为0)*/
if((i0==j0)&
&
(i1==j1)&
(i2==j2)&
(i3==j3)&
(i4==j4)&
(i5==j5)&
(i6==j6)&
(i7==j7)&
(i8==j8)&
(i9==j9)&
(getAdd[0]!
=0))
count++;
getAdd[i]);
intt,t1,t2;
inti0,i1,i2,i3,i4,i5,i6,i7,i8,i9;
initProgramm();
t1=time(NULL);
for(i9=0;
i9<
i9++)
for(i0=1;
i0<
22;
i0++)
if(count==2)/*出现2个水仙花数以后break*/
break;
if(i9+i0==21)/*几个数字的出现次数和为21以后就break,因为后面的数字出现次数和一定大于21,就超过了21位*/
{check(i0,0,0,0,0,0,0,0,0,i9);
for(i2=0;
i2<
i2++)
if(count==2)
if(i9+i0+i2==21)
{check(i0,0,i2,0,0,0,0,0,0,i9);
for(i3=0;
i3<
i3++)
if(i9+i0+i2+i3==21)
{check(i0,0,i2,i3,0,0,0,0,0,i9);
for(i4=0;
i4<
i4++)
if(i9+i0+i2+i3+i4==21)
{check(i0,0,i2,i3,i4,0,0,0,0,i9);
for(i5=0;
i5<
i5++)
if(i9+i0+i2+i3+i4+i5==21)
{check(i0,0,i2,i3,i4,i5,0,0,0,i9);
for(i6=0;
i6<
i6++)
if(i9+i0+i2+i3+i4+i5+i6==21)
{check(i0,0,i2,i3,i4,i5,i6,0,0,i9);
for(i7=0;
i7<
i7++)
if(i9+i0+i2+i3+i4+i5+i6+i7==21)
{check(i0,0,i2,i3,i4,i5,i6,i7,0,i9);
for(i8=0;
i8<
i8++)
if(i9+i0+i2+i3+i4+i5+i6+i7+i8==21)
{check(i0,0,i2,i3,i4,i5,i6,i7,i8,i9);
for(i1=0;
i1<
i1++)
if(i9+i0+i2+i3+i4+i5+i6+i7+i8+i1==21)
{check(i0,i1,i2,i3,i4,i5,i6,i7,i8,i9);
t2=time(NULL);
t=t2-t1;
\n%ds\n"
t);
2.2011模拟c语言高职
2.1.代码填空(满2分)
形如:
“abccba”,“abcba”的串称为回文串,下列代码判断一个串是否为回文串。
请补充空白的部分。
charbuf[]="
abcde11edcba"
intx=1;
strlen(buf)/2;
if(___________________)buf[i]!
=buf[strlen(buf)-1-i]
{
x=0;
break;
}
x?
"
是"
:
"
否"
2.2.代码填空(满分3分)
2.3.代码填空(满分3分)
______________________;
2.4.代码填空(满分6分)
下面函数的目的是求出某个日期是该年度的第几天。
试完善之。
如果传入:
year=1980,month=1,day=1
则返回1
year=1980,month=2,day=1
则返回32
intgetDayOfYear(intyear,intmonth,intday)
intdays={};
intflag=(year%4==0&
year%100!
=0)||year%400==0?
1:
0;
intsum=day;
for(inti=0;
month;
i++){
sum+=days[flag][i];
}
returnsum;
2.5.代码填空(满分7分)
2.6.代码填空(满分10分)
(a+b)的n次幂的展开式中各项的系数很有规律,对于n=2,3,4时分别是:
121,1331,14641。
这些系数构成了著名的杨辉三角形:
1
11
121
1331
14641
15101051
下列的程序给出了计算第m层的第n个系数的计算方法,试完善之(m,n都从0算起)。
int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 蓝桥杯 模拟 本科 高职 cc