蓝桥杯预赛题目答案.docx
《蓝桥杯预赛题目答案.docx》由会员分享,可在线阅读,更多相关《蓝桥杯预赛题目答案.docx(9页珍藏版)》请在冰点文库上搜索。
蓝桥杯预赛题目答案
2011年蓝桥杯预赛题目答案
//预赛NO.1题
#include
voidmain()
{
intJC[]={1,1,2,6,24,120,720,5040,40320,362880};
inti;
intsum;
intx;
for(i=100;i<1000;i++)
{
sum=0;
x=i;
while(x)
{
sum+=JC[x%10];
x/=10;
}
if(i==sum)
{
printf("%d\n",i);
}
}
}
#include
voidmain()
{
doublex[10]={7,8,8,8,8,20,8,8,8,8};
inti,j;
doubledif=-1;
doublebad;
doublesum;
intn=10;
doublet;
for(i=0;i<10;i++)
{
sum=0;
for(j=0;j{
if(j!
=i)sum+=x[j];
}
t=x[i]-sum/(n-1);
if(t<0)t=-t;
if(t>dif)
{
dif=t;
bad=x[i];
printf("%d,%f\n",i,x[i]);
}
}
printf("bad=%lf\n",bad);
}
//预赛NO.3题
#include
#include
voidreverse_str(char*buf,intn)
{
chartmp;
if(n<2)return;
tmp=buf[0];
buf[0]=buf[n-1];
buf[n-1]=tmp;
reverse_str(buf+1,n-2);
}
voidmain()
{
chara[10]="zhanghe";
reverse_str(a,strlen(a));
printf("%s\n",a);
}
#include
voidfun(doubledTestNo,intiBase)
{
intiT[8];
intiNo;
printf("十进制正小数%f转换成%d进制数为:
",dTestNo,iBase);
for(iNo=0;iNo<8;iNo++)
{
dTestNo*=iBase;
iT[iNo]=(int)dTestNo;
if(dTestNo)dTestNo-=iT[iNo];
}
printf("0.");
for(iNo=0;iNo<8;iNo++)printf("%d",iT[iNo]);
printf("\n");
}
voidmain()
{
doubledTestNo=0.795;
intiBase;
for(iBase=2;iBase<=9;iBase++)
fun(dTestNo,iBase);
printf("\n");
}
#include
#include
#include
voidshift(char*s,intn)
{
char*p;
char*q;
intlen=strlen(s);
char*s2;
if(len==0)return;
if(n<=0||n>=len)return;
s2=(char*)malloc(sizeof(char)*(len+1));
p=s;
q=s2+n%len;
while(*p)
{
*q++=*p++;
if(q-s2>=len)
{
*q='\0';
q=s2;
}
}
strcpy(s,s2);
free(s2);
}
voidmain()
{
charstr[10]="zhanghe";
shift(str,2);
printf("%s\n",str);
}
//预赛NO.6题
#include
#include
intg(inta,intb)//b是摇号产生的
{
charsa[]="00000000";
charsb[]="00000000";
intn=0;
inti,j;
chart;
sprintf(sa,"%8d",a);
sprintf(sb,"%8d",b);
for(i=0;i<8;i++)
{
for(j=1;j<=8-i;j++)
{
t=sa[i+j];
sa[i+j]=0;
if(strstr(sb,sa+i))
{
if(j>n)n=j;
}
sa[i+j]=t;
}
}
returnn;
}
voidmain()
{
inta=12345678;
intb=42347856;
printf("%d\n",g(a,b));
}
预赛NO.7题
#include
/*
m:
袋中红球的数目
n:
袋中白球的数目
x:
需要取出的数目
y:
红球至少出现的次数
*/
doublepro(intm,intn,intx,inty)
{
doublep1;
doublep2;
if(y>x)return0;
if(y==0)return1;
if(y>m)return0;
if(x-n>y)return1;
p1=pro(m-1,n,x-1,y-1);//取红球
p2=pro(m,n-1,x-1,y);//取白球
return(double)m/(m+n)*p1+(double)n/(m+n)*p2;
}
voidmain()
{
intm,n,x;
printf("请依次输入红球个数、白球个数及要取的球的个数:
");
scanf("%d%d%d",&m,&n,&x);
printf("%lf\n",pro(m,n,x,x/2+1));
}
//预赛NO.8题
#include
#include
intm[20][20];//矩阵
intidx=1;//位置编号
intc;//层数
intin;//n的值
doubledn;//n的值(用double型可以计算层数)
voidmain()
{
inti,k;
intp,q;
scanf("%lf",&dn);
c=(int)(dn-0.1)/3+1;
in=(int)dn;
for(i=0,k=in-1;i{
if(i==k)
{
m[i][i]=idx;
break;
}
for(p=i;pm[i][p]=idx++;
for(p=i,q=k;pm[p][q]=idx++;
for(p=k;p>i;p--)
m[p][i]=idx++;
}
for(p=0;p{
for(q=0;q{
printf("%4d",m[p][q]);
}
printf("\n");
}
}
//预赛NO.9题
#include
intsln;//方案的个数
intgm;//商品的种类
intprice[1000];//各种商品价钱
intcount[1000];//各种商品的个数
intmethod[1000][1000];//每种解决方案中各商品的个数
intcost;//当前花费
voidoutput()//输出解决方案
{
inti,j;
printf("%d\n",sln);
for(i=0;i{
for(j=0;jprintf("%3d",method[i][j]);
printf("\n");
}
}
voidfun(intm)
{
inti;
if(cost==1000)
{
for(i=0;imethod[sln][i]=count[i];
sln++;
return;
}
if(cost>1000||m<0)
return;
//choosem
++count[m];
cost+=price[m];
fun(m);
//notchoosem
--count[m];
cost-=price[m];
fun(m-1);
}
voidmain()
{
intm;//商品的种类
intk;
scanf("%d",&m);
gm=m;
for(k=0;kfun(m-1);
output();
}
//预赛NO.10题
#include
#include
chara[26]={"abcdefghijklmnopqrstuvwxyz"};
charkey[26];//密钥
intkey_len;//密钥长度
intm[5][5];//加密矩阵
charInput[1000];//待加密串
charSecret[1000];//密文
voidInitM()
{
inti,j;
//将key中的字符装入矩阵
for(i=0;i{
m[i/5][i%5]=key[i];
a[key[i]-97]='*';//表示已经装入矩阵
}
//将其余字母装入矩阵
for(j=0;j<26&&i<25;j++)
{
if(a[j]!
='*')
{
m[i/5][i%5]=a[j];
a[j]='*';
i++;
}
}
}
intInM(inti)
{
intp,q;
intflag=0;
for(p=0;p<5&&flag!
=1;p++)
{
for(q=0;q<5;q++)
{
if(Input[i]==m[p][q])
{
flag=1;
break;
}
}
}
returnflag;
}
introw(inti)
{
intp,q;
for(p=0;p<5;p++)
{
for(q=0;q<5;q++)
{
if(Input[i]==m[p][q])
returnp;
}
}
}
intcolumn(inti)
{
intp,q;
for(p=0;p<5;p++)
{
for(q=0;q<5;q++)
{
if(Input[i]==m[p][q])
returnq;
}
}
}
voidtranslate(char*input,intlen)
{
inti,j;
intr1,r2,c1,c2;
if(len==1)
{
Secret[0]=Input[0];
}
else
{
for(i=0;i{
j=i+1;
if((Input[i]==Input[j])||((InM(i)+InM(j))==1))
{
Secret[i]=Input[i];
Secret[j]=Input[j];
continue;
}
if((row(i)==row(j))||(column(i)==column(j)))
{
Secret[i]=Input[j];
Secret[j]=Input[i];
continue;
}
r1=row(i);
c1=column(i);
r2=row(j);
c2=column(j);
Secret[i]=m[r1][c2];
Secret[j]=m[r2][c1];
}
if(i==len+1)//只剩1个
{
i-=2;
Secret[i]=Input[i];
}
}
}
voidmain()
{
scanf("%s",key);
scanf("%s",Input);
key_len=strlen(key);
InitM();//初始化加密矩阵
translate(Input,strlen(Input));//加密
printf("%s\n",Secret);//输出密文
}