蓝桥杯练习系统基础练习(非VIP试题)

前言

  • 环境:Dev-C++
  • 万能头文件: #include<bits/stdc++.h>
  • 水平不高,单纯记录寒假生活。

基础练习

BASIC-01 A+B问题

解题思路

  • 有手就行

AC代码

#include<bits/stdc++.h> using namespace std; int main() { int a, b; cin >> a >> b; cout << a + b; return 0; }

BASIC-02 序列求和

解题思路

  • 利用等差数列公式求和
  • 注意数据范围

AC代码

#include<bits/stdc++.h> using namespace std; int main() { long long n; cin>>n; cout<<(1+n)*n/2; return 0; }

BASIC-03 圆的面积

解题思路

  • 使用圆的面积公式
  • PI需要定义,这里使用的是acos(-1.0)
  • 注意输出格式

AC代码

#include<bits/stdc++.h> #define PI acos(-1.0) using namespace std; int main() { int r; cin>>r; double s=r*r*PI; printf("%.7lf",s); return 0; }

BASIC-04 Fibonacci数列

解题思路

  • 不需要求出结果再取模,直接进行取模
  • 直接递归时间会超限

AC代码

#include<bits/stdc++.h> using namespace std; long long a[1000050]; int main( ) { int n; cin>>n; a[1]=a[2]=1; for(int i=3;i<=n;i++) { a[i]=(a[i-1]+a[i-2])%10007; } cout<<a[n]; }

BASIC-1 闰年判断

解题思路

  • 了解闰年的特征
  • 简单的判断语句

AC代码

#include<bits/stdc++.h> using namespace std; int main( ) { int y; cin>>y; if((y%4==0&&y%100!=0)||y%400==0) cout<<"yes"; else cout<<"no"; return 0; }

BASIC-2 01字串

解题思路

  • 我的方法是0-31一共32个数,想办法用二进制表示。
  • 这题无脑暴力输出也能过(狗看了都摇头)

AC代码

#include<bits/stdc++.h> using namespace std; int main( ) { for(int i=0;i<=31;i++) { int j=i; cout<<j/16; //第一位表示有几个16 j%=16; cout<<j/8; //对16取模后有几个8 j%=8; cout<<j/4; //对8取模后有几个4 j%=4; cout<<j/2; //对4取模后有几个2 j%=2; cout<<j; //对2取模有几个1(即本身) cout<<endl; } return 0; }

BASIC-3 字母图形

解题思路

  • 先将对角线全赋值为A,再向左向右进行赋值

AC代码

#include<bits/stdc++.h> using namespace std; char a[27][27]; int main( ) { int n,m; cin>>n>>m; for(int i=0;i<26;i++) //输入完整的表 { a[i][i]='A'; for(int j=0;j<26-i;j++) a[i][i+j]='A'+j; for(int k=0;k<=i;k++) a[i][i-k]='A'+k; } for(int i=0;i<n;i++) //输出n行m列 { for(int j=0;j<m;j++) { cout<<a[i][j]; } cout<<endl; } return 0; }

BASIC-4 数列特征

解题思路

  • 先把数存进数组
  • 简单的最大最小值比较再赋值还有sum求和,注意maxm的初值要设的小于-10000

AC代码

#include<bits/stdc++.h> using namespace std; int a[10050]; int main( ) { int n; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; } int maxm=-10010; int minm=10010; int sum=0; for(int i=0;i<n;i++) { if(maxm<=a[i]) maxm=a[i]; if(minm>=a[i]) minm=a[i]; sum+=a[i]; } cout<<maxm<<endl<<minm<<endl<<sum; return 0; }

BASIC-5 查找整数

解题思路

  • 简单的遍历然后判断输出,注意下标得加1

AC代码

#include<bits/stdc++.h> using namespace std; int a[1050]; int main( ) { int n,m; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; cin>>m; for(int i=0;i<n;i++) { if(a[i]==m) { cout<<i+1; //下标加一代表是第几个数,因为下标从0开始 return 0; } } cout<<-1; return 0; }

BASIC-6 杨辉三角形

解题思路

  • 简单的杨辉三角,方法看注释

AC代码

#include<bits/stdc++.h> using namespace std; int a[34][34]; int main( ) { int n; cin>>n; for(int i=0;i<n;i++) { a[i][i]=1; //左对角线全赋为1 a[i][0]=1; //第一列全赋为1 } for(int i=2;i<n;i++) { for(int j=1;j<i+1;j++) a[i][j]=a[i-1][j-1]+a[i-1][j];//从a[2][1]开始遍历赋值,每个等于肩上的两数之和 } for(int i=0;i<n;i++) { for(int j=0;j<i+1;j++) //这边的输出方法有点小讲究,我也不知道每行后面多个空格会不会错,但是这样写肯定没错 { if(j==0) cout<<a[i][j]; else cout<<' '<<a[i][j]; } cout<<endl; } return 0; }

BASIC-7 特殊的数字

解题思路

  • 通过剥离每位数字再三次方相加判断是否和原数相等

AC代码

#include<bits/stdc++.h> using namespace std; int main( ) { for(int i=100;i<=999;i++) { int n,a,sum=0; n=i; while(n) { a=n%10; //第一次循环a是个位的数字,第二次循环是十位的数字,第三次是百位的数字 n/=10; sum+=pow(a,3); } if(sum==i) cout<<i<<endl; } return 0; }

BASIC-8 回文数

解题思路

  • 一样通过剥离法,将每一位剥下来再乘10相加进行判断

AC代码

#include<bits/stdc++.h> using namespace std; int main( ) { for(int i=1000;i<10000;i++) { int n,a,sum=0; n=i; while(n) { a=n%10; n/=10; sum*=10; sum+=a; } if(i==sum) cout<<i<<endl; } return 0; }

BASIC-9 特殊回文数

解题思路

  • 与上题类似,但还需要将剥离下来的数字进行相加求和,需要两个判断同时为true

AC代码

#include<bits/stdc++.h> using namespace std; int main( ) { int m; cin>>m; for(int i=10000;i<1000000;i++) { int n,a,sum1=0,sum2=0; n=i; while(n) { a=n%10; //剥离个位 n/=10; //自身除10 sum1*=10; sum1+=a; //sum1求翻转的数字 sum2+=a; //sum2求各位上数字之和 } if(sum1==i && sum2==m) cout<<i<<endl; } return 0; }

BASIC-10 十进制转十六进制

解题思路

  • 掌握进制转换原理

AC代码

#include<bits/stdc++.h> using namespace std; int main() { int k, n; int a[100]; cin>>n; k = 0; while (n >=16)//这个循环将十进制的每一位倒序存入数组 { a[k] = n % 16; k++; n = n / 16; } a[k] = n % 16; for (k; k>=0; k--)//转为十六进制再倒序输出 { if (a[k] < 10) printf("%d", a[k]); else printf("%c", 'A' + a[k] - 10); } return 0; }

BASIC-11 十六进制转十进制

解题思路

  • 以FFFF为例,第一次sum为15,第二次为1516+15,第三次为(1516+15)16+15,第四次为((1516+15)16+15)16+15,即15163+15162+15161+15160
#include<bits/stdc++.h> int main() { int i, l; long long sum; char a[100]; sum = 0; gets(a); for (i=0; a[i];i++) { if (a[i] <='9') a[i] = a[i] - '0'; else if(a[i]<='F') a[i] = a[i] - 'A' + 10; else a[i] = a[i] - 'a' + 10; } l = strlen(a); for (i = 0; a[i]; i++) sum = sum + a[i] * pow(16, l - i - 1); printf("%lld", sum); return 0; }

BASIC-12 十六进制转八进制

解题思路

  • 先把十六进制转换为二进制,再转换为八进制
  • 十六进制的一位对应二进制的四位,直接转换成字符串
  • 二进制转换成八进制时,三位转换成八进制一位,所以提前在前面补足0
  • 然后把八进制的字符串从第一个不为‘0 ’处开始输出就可以了
#include<bits/stdc++.h> using namespace std; string _16_2_(string str) { string a=""; for(int i=0;i<str.size();i++) { switch(str[i]) //将十六进制转为四位四位的二进制 { case '0': a+= "0000"; break; case '1': a+= "0001"; break; case '2': a+= "0010"; break; case '3': a+= "0011"; break; case '4': a+= "0100"; break; case '5': a+= "0101"; break; case '6': a+= "0110"; break; case '7': a+= "0111"; break; case '8': a+= "1000"; break; case '9': a+= "1001"; break; case 'A': a+= "1010"; break; case 'B': a+= "1011"; break; case 'C': a+= "1100"; break; case 'D': a+= "1101"; break; case 'E': a+= "1110"; break; case 'F': a+= "1111"; break; default: break; } } return a; } string _2_8(string str) //再将二进制转为八进制,注意要进行补0,将二进制补为3的整数倍 { string a; switch(str.size()%3) { case 0:break; case 1:str="00"+str;break; case 2:str="0"+str;break; default:break; } for(int i=0;i<str.size();i+=3) { int m=(str[i]-'0')*4+(str[i+1]-'0')*2+(str[i+2]-'0'); a+=(m+'0'); } return a; } int main( ) { int n; cin>>n; string s; while(n--) { cin>>s; string a=_16_2_(s); //先转为二进制 string b=_2_8(a); //再转为八进制 int k=b.size(); int p=0; while(b[p]=='0') p++; //题目中要求输出时前面不需要带0所以从不是0的时候开始 for(int i=p;i<k;i++) cout<<b[i]; if(n>=1) cout<<endl; //这一行必不可少,少输出换行就是错的的 } return 0; }

至此蓝桥杯基础练习非VIP部分习题已经完毕


__EOF__

本文作者慎独
本文链接https://www.cnblogs.com/yyh001/p/15781945.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   慎独_y  阅读(101)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示