蓝桥杯.docx
《蓝桥杯.docx》由会员分享,可在线阅读,更多相关《蓝桥杯.docx(41页珍藏版)》请在冰豆网上搜索。
蓝桥杯
入门训练部分:
A+B问题
#include
intmain()
{
inta,b;
scanf("%d%d",&a,&b);
printf("%d",a+b);
return0;
}
序列求和
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intmain()
{
longlongn;
scanf("%I64d",&n);
printf("%I64d\n",(n+1)*n/2);
return0;
}
圆的面积
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intmain()
{
intr;
scanf("%d",&r);
printf("%.7f",3.14159265358979323*r*r);
return0;
}
Fibonacci数列
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intmain()
{
inta=1,b=1,n,num;
scanf("%d",&n);
if(n==1||n==2)
{
printf("1\n");
return0;
}
else
{
for(inti=3;i<=n;i++)
{
num=(a+b)%10007;
a=b;
b=num;
}
printf("%d\n",num);
}
return0;
}
基础练习部分:
闰年判断
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intmain()
{
intn;
scanf("%d",&n);
if(n%400==0||n%4==0&&n%100!
=0)
printf("yes\n");
else
printf("no\n");
return0;
}
01字串
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intmain()
{
for(inta=0;a<=1;a++)
for(intb=0;b<=1;b++)
for(intc=0;c<=1;c++)
for(intd=0;d<=1;d++)
for(inte=0;e<=1;e++)
printf("%d%d%d%d%d\n",a,b,c,d,e);
return0;
}
字母图形
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intmain()
{
intn,m;
scanf("%d%d",&n,&m);
for(inti=1;i<=n;i++)
{
for(intj=1;j<=m;j++)
putchar(abs(i-j)+'A');
putchar(10);
}
return0;
}
数列特征
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intmain()
{
intn,temp,maxx,minn,sum=0;
scanf("%d",&n);
for(inti=1;i<=n;i++)
{
scanf("%d",&temp);
if(i==1)
{
maxx=minn=temp;
}
if(temp>maxx)
maxx=temp;
if(tempminn=temp;
sum+=temp;
}
printf("%d\n%d\n%d\n",maxx,minn,sum);
return0;
}
查找整数
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intarr[1005];
intmain()
{
intn,temp;
scanf("%d",&n);
for(inti=0;iscanf("%d",&arr[i]);
scanf("%d",&temp);
intseat=-1;
for(inti=0;iif(arr[i]==temp)
{
seat=i+1;
break;
}
printf("%d",seat);
return0;
}
杨辉三角形
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intmain()
{
intn,arr[35]={0};
scanf("%d",&n);
for(inti=1;i<=n;i++)
{
arr[1]=arr[i]=1;
for(intj=i-1;j>1;j--)
{
arr[j]+=arr[j-1];
}
for(intj=1;j<=i;j++)
printf("%d",arr[j]);
printf("\n");
}
return0;
}
特殊的数字
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intmain()
{
for(inti=100;i<1000;i++)
{
inta=i/100,b=i%100/10,c=i%10;
if(a*a*a+b*b*b+c*c*c==i)
printf("%d\n",i);
}
return0;
}
回文数
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intmain()
{
charstr[10];
for(inti=1000;i<10000;i++)
{
sprintf(str,"%d",i);
if(str[0]==str[3]&&str[1]==str[2])
printf("%d\n",i);
}
return0;
}
特殊回文数
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intmain()
{
intn;
charstr[10];
scanf("%d",&n);
for(inti=10000;i<1000000;i++)
{
sprintf(str,"%d",i);
intsum=0;
for(intj=0;str[j];j++)
sum+=str[j]-'0';
if(sum!
=n)
continue;
if(i<100000&&str[0]==str[4]&&str[1]==str[3])
printf("%d\n",i);
elseif(i>=100000&&str[0]==str[5]&&str[1]==str[4]&&str[2]==str[3])
printf("%d\n",i);
}
return0;
}
十进制转十六进制
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intmain()
{
intn;
scanf("%d",&n);
printf("%X\n",n);
return0;
}
十六进制转十进制
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intmain()
{
unsignedintn;
scanf("%X",&n);
printf("%u\n",n);
return0;
}
十六进制转八进制
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
charstr[100005],num;
voidFun(inti,intstate)
{
inttemp;
if(i<0)
{
if(num!
=0)
{
printf("%d",num);
}
return;
}
if(state!
=3)
{
temp=str[i]>='0'&&str[i]<='9'?
str[i]-'0':
str[i]-'A'+10;
temp<<=state;
num|=temp;
temp=num;
num>>=3;
Fun(i-1,state+1);
printf("%d",(temp&1)+(temp&2)+(temp&4));
}
else
{
temp=num;
num>>=3;
Fun(i,0);
printf("%d",(temp&1)+(temp&2)+(temp&4));
}
}
intmain()
{
intn;
scanf("%d",&n);
while(n--)
{
num=0;
scanf("%s",str);
Fun(strlen(str)-1,0);
printf("\n");
}
return0;
}
数列排序
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intarr[205];
intmain()
{
intn;
scanf("%d",&n);
for(inti=0;iscanf("%d",&arr[i]);
sort(arr,arr+n);
for(inti=0;iprintf("%d",arr[i]);
return0;
}
算法训练
区间k大数查询
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
intarr[1005];
intmain()
{
intn,m,l,r,k;
scanf("%d",&n);
for(inti=0;iscanf("%d",&arr[i]);
scanf("%d",&m);
while(m--)
{
priority_queueque;
scanf("%d%d%d",&l,&r,&k);
for(inti=l-1;ique.push(arr[i]);
while(--k)
que.pop();
printf("%d\n",que.top());
}
return0;
}
操作格子
#include
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
structLine
{
intl,r;
intsum,max;
};
Linearr[300005];
voidBuild(intseat,intl,intr)
{
arr[seat].l=l;
arr[seat].r=r;
arr[seat].sum=0;
arr[seat].max=0;
if(l==r)
return;
Build(seat*2,l,(l+r)/2);
Build(seat*2+1,(l+r)/2+1,r);
}
voidInsert(intseat,intv,intnum)
{
arr[seat].sum+=num;
if(arr[seat].maxarr[seat].max=num;
if(arr[seat].l==arr[seat].r)
return;
if(v<=(arr[seat].l+arr[seat].r)/2)
Insert(seat*2,v,num);
else
Insert(seat*2+1,v,num);
}
voidChange(intseat,intv,intnum)
{
if(v==arr[seat].l&&v==arr[seat].r)
{
arr[seat].sum=num;
arr[seat].max=num;
return;
}
intmiddle=(arr[seat].l+arr[seat].r)/2;
if(v<=middle)
Change(seat*2,v,num);
else
Change(seat*2+1,v,num);
arr[seat].sum=arr[seat*2].sum+arr[seat*2+1].sum;
arr[seat].max=max(arr[seat*2].max,arr[seat*2+1].max);
}
intQuerySum(intseat,intl,intr)
{
if(l==arr[seat].l&&r==arr[seat].r)
returnarr[seat].sum;
intmiddle=(arr[seat].l+arr[seat].r)/2;
if(r<=middle)
returnQuerySum(seat*2,l,r);
elseif(l>middle)
returnQuerySum(seat*2+1,l,r);
elsereturnQuerySum(seat*2,l,middle)+QuerySum(seat*2+1,middle+1,r);
}
intQueryMax(intseat,intl,intr)
{
if(l==arr[seat].l&&r==arr[seat].r)
returnarr[seat].max;
intmiddle=(arr[seat].l+arr[seat].r)/2;
if(r<=middle)
returnQueryMax(seat*2,l,r);
elseif(l>middle)
returnQueryMax(seat*2+1,l,r);
elsereturnmax(QueryMax(seat*2,l,middle),QueryMax(seat*2+1,middle+1,r));
}
intmain()
{
intn,m,temp,v,a,b;
scanf("%d%d",&n,&m);
Build(1,1,n);
for(inti=1;i<=n;i++)
{
scanf("%d",&temp);
Insert(1,i,temp);
}
while(m--)
{
scanf("%d%d%d",&v,&a,&b);
if(v==1)
Change(1,a,b);
elseif(v==2)
printf("%d\n",QuerySum(1,a,b));
else
printf("%d\n",QueryMax(1,a,b));
}
return0;
}
带分数
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
charstr[]="123456789";
charnum1[10],num2[10],num3[10];
inta,b,c,sum;
intmain()
{
intN;
scanf("%d",&N);
chartemp[10];
intlen=sprintf(temp,"%d",N);
do
{
for(inti=0;i{
memcpy(num1,str,i+1);
num1[i+1]='\0';
a=atoi(num1);
for(intj=(((8-i)%2)?
((8-i)/2+1):
((8-i)/2));j<=7-i;++j)
{
if(str[i+j]-'0'!
=((N-a)*(str[8]-'0'))%10)
continue;
memcpy(num2,str+i+1,j);
num2[j]='\0';
memcpy(num3,str+i+1+j,8-i-j);
num3[8-i-j]='\0';
b=atoi(num2);
c=atoi(num3);
if(b>c&&b%c==0&&N==a+b