蓝桥基础题

Posted 浅忆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥基础题相关的知识,希望对你有一定的参考价值。

问题一:回文数

问题描述   1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。 输出格式   按从小到大的顺序输出满足条件的四位十进制数。

思路:分别求出这个四位数的每一个位上的数,然后做比较

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=5e3+10;
 4 int dp[maxn][3];
 5 int a[10000];
 6 int main(){
 7     ios::sync_with_stdio(0);
 8     memset(a,0,sizeof(a));
 9     for(int i=1000;i<10000;i++){
10         int a=i/1000;
11         int b=(i-a*1000)/100;
12         int c=(i-a*1000-b*100)/10;
13         int d=i%10;
14         if(a==d&&b==c){
15         cout<<i<<endl;
16         }
17     }
18         return 0;
19 }
 
问题描述

给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。

输入格式

第一行包含一个数n,表示序列长度。

第二行包含n个正整数,表示给定的序列。

第三个包含一个正整数m,表示询问个数。

接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。

输出格式
总共输出m行,每行一个数,表示询问的答案。
样例输入
5
1 2 3 4 5
2
1 5 2
2 3 2
样例输出
4
2
数据规模与约定

对于30%的数据,n,m<=100;

对于100%的数据,n,m<=1000;

保证k<=(r-l+1),序列中的数<=106。

 
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=5e3+10;
 4 int dp[maxn][3];
 5 int a[1000];
 6 int b[1000];
 7 bool cmp(int a,int b){
 8     return a>b;
 9 }
10 int main(){
11     ios::sync_with_stdio(0);
12     memset(b,0,sizeof(b));
13     memset(a,0,sizeof(a));
14     int n;
15     cin>>n;
16     for(int i=1;i<=n;i++)
17         cin>>a[i];
18     int m;
19     cin>>m;
20     for(int i=1;i<=m;i++){
21         int l,r,k;
22         cin>>l>>r>>k;
23         for(int j=0, i=l;i<=r;i++,j++){
24         b[j]=a[i];
25         }
26         for(int i=0;i<r-l+1-1;i++){
27             for(int j=0;j<r-l+1-1-i;j++){
28                 if(b[j]<b[j+1]){
29                     int temp=b[j];
30                     b[j]=b[j+1];
31                     b[j+1]=temp;
32                 }
33             }
34         }
35         cout<<b[k-1]<<endl;
36     }
37     return 0;
38 }

 

问题描述
  
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
  第一行为一个整数n。
  第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
  输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9
 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <queue>
 5 #include <vector>
 6 #include <algorithm>
 7 #include <stack>
 8 
 9 using namespace std;
10 const int maxn=222;
11 int a[maxn];
12 void InsertSort(int *a,int n){
13     for(int i=1;i<n;i++){
14         if(a[i]<a[i-1]){
15             int j=i-1;
16             int x=a[i];
17             a[i]=a[i-1];
18             while(x<a[j-1]&&j>0) a[j]=a[j-1],j--;
19             a[j]=x;
20         }
21     }
22 }
23 void ShellSort(int *a,int n){
24     for(int k=n/2;k;k/=2){
25         for(int i=k;i<n;i++){
26             for(int j=i-k;j>=0;j-=k)
27                     if(a[j]>a[j+k]) swap(a[j],a[j+k]);
28         }
29     }
30 }
31 void SelectSort(int *a,int n){
32     for(int i=0;i<n;i++){
33         int k=i;
34         for(int j=i+1;j<n;j++){
35             if(a[j]<a[k]) k=j;
36             if(k!=i) swap(a[i],a[k]);
37         }
38     }
39 }
40 void SelectSort2(int *a,int n){
41     for(int i=0;i<n/2;i++){
42         int mink=i,maxk=n-i-1;
43     }
44 }
45 int main(){
46     ios::sync_with_stdio(0);
47     int n;
48     cin>>n;
49     memset(a,0,sizeof(a));
50     for(int i=0;i<n;i++){
51         cin>>a[i];
52     }
53 //    Quick_sort(a,1,n);
54     ShellSort(a,n);
55     for(int i=0;i<n;i++){
56         if(!i)cout<<a[i];
57             else  cout<<" "<<a[i];
58     }
59     cout<<endl;
60         return 0;
61 }

 

 
问题描述
  给定n个十六进制正整数,输出它们对应的八进制数。

输入格式
  输入的第一行为一个正整数n (1<=n<=10)。
  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000

输出格式
  输出n行,每行为输入对应的八进制正整数。

  【注意
  输入的十六进制数不会有前导0,比如012A。
  输出的八进制数也不能有前导0。

样例输入
  2
  39
  123ABC

样例输出
  71
  4435274

  提示
  先将十六进制数转换成某进制数,再由某进制数转换成八进制 

十六进制每一位 对应4位二进制数,八进制对应3位二进制数,十六进制生成二进制后,

在转化八进制前,要查看长度是不是三的倍数,如果不是,则用0补齐.之后在转化八进制开始要判断

开头的三个是不是"000"的形式,如果是则不算在八进制数里. 

 1 #include <iostream>
 2 #include <iostream>
 3 #include <stdio.h>
 4 #include <string.h>
 5 #include <queue>
 6 #include <vector>
 7 #include <algorithm>
 8 #include <stack>
 9 using namespace std;
10 
11 int main(){
12     ios::sync_with_stdio(0);
13     int n;
14     cin>>n;
15     int sum;
16     while(n--){
17         string s1,s2;
18         cin>>s1;
19         s2="";
20         sum=0;
21         for(int i=0;i<s1.length();++i){
22             switch (s1[i]) {
23                 case 0: s2+="0000";break;
24                 case 1: s2+="0001";break;
25                 case 2: s2+="0010";break;
26                 case 3: s2+="0011";break;
27                 case 4: s2+="0100";break;
28                 case 5: s2+="0101";break;
29                 case 6: s2+="0110";break;
30                 case 7: s2+="0111";break;
31                 case 8: s2+="1000";break;
32                 case 9: s2+="1001";break;
33                 case A: s2+="1010";break;
34                 case B: s2+="1011";break;
35                 case C: s2+="1100";break;
36                 case D: s2+="1101";break;
37                 case E: s2+="1110";break;
38                 case F: s2+="1111";break;
39                 default:break;
40             }
41         }
42             int len=s2.length();
43             int flag=0;
44             if(len%3==1){
45                 s2="00"+s2;
46             }else if(len%3==2){
47                 s2="0"+s2;
48             }
49             for(int i=0;i<=s2.length()-3;i+=3){
50                 sum=4*(s2[i]-0)+2*(s2[i+1]-0)+(s2[i+2]-0);
51                 if(sum)
52                   flag=1;
53                 if(flag)
54                     cout<<sum;
55             }
56         cout<<endl;
57     }
58         return 0;
59 }

 

问题描述
  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
 
样例输入
FFFF
样例输出
65535
 1 #include <iostream>
 2 #include <iostream>
 3 #include <stdio.h>
 4 #include <string.h>
 5 #include <queue>
 6 #include <vector>
 7 #include <algorithm>
 8 #include <math.h>
 9 #include <stack>
10 typedef long long ll;
11 using namespace std;
12 int a[15];
13 int main(){
14     ios::sync_with_stdio(0);
15     string s;
16     cin>>s;
17     ll sum=0;
18     int len=s.length();
19     for(int i=0;i<s.length();++i){
20         if(A<=s[i]&&s[i]<=F){
21             s[i]=(int)(s[i]-A)+10+0;
22         }
23         sum+=((s[i]-0)*(pow(16,len-1-i)));
24     }
25     cout<<sum<<endl;
26         return 0;
27 }

 

基础练习 闰年判断  

问题描述

给定一个年份,判断这一年是不是闰年。

当以下情况之一满足时,这一年是闰年:

1. 年份是4的倍数而不是100的倍数;

2. 年份是400的倍数。

其他的年份都不是闰年。

输入格式
输入包含一个整数y,表示当前的年份。
输出格式
输出一行,如果给定的年份是闰年,则输出yes,否则输出no。

说明:当试题指定你输出一个字符串作为结果(比如本题的yes或者no,你需要严格按照试题中给定的大小写,写错大小写将不得分。

样例输入
2013
样例输出
no
样例输入
2016
样例输出
yes
数据规模与约定
1990 <= y <= 2050。
 
 1 #include <iostream>
 2 #include <iostream>
 3 #include <stdio.h>
 4 #include <string.h>
 5 #include <queue>
 6 #include <vector>
 7 #include <algorithm>
 8 #include <math.h>
 9 #include <stack>
10 #include <set>
11 
12 typedef long long ll;
13 using namespace std;
14 int a[]={16,256,4096,65536,1048576,16777216,268435456};
15 char b[]={A,B,C,D,E,F};
16 set<int>s;
17 
18 int main(){
19     ios::sync_with_stdio(0);
20     int y;
21     cin>>y;
22     if(y<1990||y>2050) return 0;
23     if((y%4==0&&y%100!=0)||y%400==0){
24         cout<<"yes"<<endl;
25     }else{
26         cout<<"no"<<endl;
27     }
28         return 0;
29 }

 

基础练习 字母图形  

问题描述

利用字母可以组成一些美丽的图形,下面给出了一个例子:

ABCDEFG

BABCDEF

CBABCDE

DCBABCD

EDCBABC

这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。

输入格式
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
输出格式
输出n行,每个m个字符,为你的图形。
 
样例输入
5 7
样例输出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
 
样例输入
20 5 
样例输出

ABCDE
BABCD
CBABC
DCBAB
EDCBA
FEDCB
GFEDC
HGFED
IHGFE
JIHGF
KJIHG
LKJIH
MLKJI
NMLKJ
ONMLK
PONML
QPONM
RQPON
SRQPO
TSRQP

 

数据规模与约定
1 <= n, m <= 26。
 
m,n的大小
 1 #include <iostream>
 2 #include <iostream>
 3 #include <stdio.h>
 4 #include <string.h>
 5 #include <queue>
 6 #include <vector>
 7 #include <algorithm>
 8 #include <math.h>
 9 #include <stack>
10 #include <set>
11 
12 typedef long long ll;
13 using namespace std;
14 string s="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
15 int i,j,k;
16 int main(){
17     ios::sync_with_stdio(0);
18     int n,m;
19     cin>>n>>m;
20     if(1<=n&&m<=26){
21         for(i=1;i<=n;i++){
22             int ans=0;
23             for(j=i;j>0;j--){
24                 cout<<s[j-1];
25                 ans++;
26                 if(ans<m) continue;
27                     else    break;
28             }
29             for(k=1;k<=m-i;k++){
30                 cout<<s[k];
31             }
32             cout<<endl;
33         }
34     }else {
35         return 0;
36     }
37         return 0;
38 }

 

基础练习 数列特征  

问题描述

给出n个数,找出这n个数的最大值,最小值,和。

输入格式

第一行为整数n,表示数的个数。

第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。

输出格式
输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。
样例输入
5
1 3 -2 4 5
样例输出
5
-2
11
数据规模与约定
1 <= n <= 10000。
 
注意初始化
 1 #include <iostream>
 2 #include <iostream>
 3 #include <stdio.h>
 4 #include <string.h>
 5 #include <queue>
 6 #include <vector>
 7 #include <algorithm>
 8 #include <math.h>
 9 #include <stack>
10 #include <set>
11 #define INF 1000000
12 typedef long long ll;
13 using namespace std;
14 string s="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
15 int i,j,k;
16 int main(){
17     ios::sync_with_stdio(0);
18     int n;
19     int maxx=-INF,minn=INF,sum=0;
20     cin>>n;
21     for(int i=0;i<n;i++){
22         int x;
23         cin>>x;
24         if(x>maxx){
25             maxx=x;
26         }
27         if(x<minn){
28             minn=x;
29         }
30         sum+=x;
31     }
32     cout<<maxx<<\n<<minn<<\n<<sum<<endl;
33         return 0;
34 }

 


基础练习 查找整数  

 
问题描述

给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。

输入格式

第一行包含一个整数n。

第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。

第三行包含一个整数a,为待查找的数。

输出格式
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
样例输入
6
1 9 4 8 3 9
9
样例输出
2
数据规模与约定
1 <= n <= 1000。

 

 1 #include <iostream>
 2 #include <iostream>
 3 #include <stdio.h>
 4 #include <string.h>
 5 #include <queue>
 6 #include <vector>
 7 #include <algorithm>
 8 #include <math.h>
 9 #include <stack>
10 #include <set>
11 #define INF 1000000
12 typedef long long ll;
13 using namespace std;
14 string s="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
15 const int maxn=1007;
16 int a[maxn]={0};
17 int main(){
18     ios::sync_with_stdio(0);
19     int n,m;
20     cin>>n;
21     for(int i=0;i<n;i++){
22         cin>>a[i];
23     }
24     cin>>m;
25     int ans=0,i;
26     bool flag=0;
27     for(i=0;i<n;i++){
28         if(a[i]==m){
29             ans=i;
30             flag=1;
31             break;
32         }
33     }
34     if(flag) cout<<ans+1<<endl;
35         else cout<<"-1"<<endl;
36         return 0;
37 }

 


  基础练习 杨辉三角形  
 
 
问题描述

杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。

  

它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。

  

下面给出了杨辉三角形的前4行:

  

   1

  

  1 1

  

 1 2 1

  

1 3 3 1

  

给出n,输出它的前n行。

输入格式

输入包含一个数n。

输出格式
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
样例输入
4
样例输出
1
1 1
1 2 1
1 3 3 1
数据规模与约定
1 <= n <= 34。

 

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string>
 4 #include <algorithm>
 5 #include <queue>
 6 #include <vector>
 7 #include <set>
 8 #include <math.h>
 9 #include <stack>
10 
11 using namespace std;
12 const int maxn=10000;
13 typedef long long ll;
14 int a[70][70];
15 
16 int main(){
17     ios::sync_with_stdio(0);
18     int n;
19     cin>>n;
20     int ans=1;
21     a[1][1]=1;
22     cout<<a[1][1]<<endl;
23     for(int i=2;i<=n;++i){
24         for(int j=1;j<=i;++j){
25             a[i][j]=a[i-1][j-1]+a[i-1][j];
26             if(i!=j){
27                 printf("%d ",a[i][j]);
28             }else{
29                 printf("%d\n",a[i][j]);
30             }
31         }
32     }
33     return 0;
34 }

 


  基础练习 特殊回文数  
 
问题描述
  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
  输入一行,包含一个正整数n。
输出格式
  按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
  1<=n<=54。
 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string>
 4 #include <algorithm>
 5 #include <queue>
 6 #include <vector>
 7 #include <set>
 8 #include <math.h>
 9 #include <stack>
10 
11 using namespace std;
12 const int maxn=10000;
13 typedef long long ll;
14 int a[70][70];
15 
16 int main(){
17     ios::sync_with_stdio(0);
18     int n;
19     cin>>n;
20     int m=10001;
21     while(m<100000){
22         int a=m/10000;
23         int b=(m-a*10000)/1000;
24         int c=(m-a*10000-b*1000)/100;
25         int d=(m-a*10000-b*1000-c*100)/10;
26         int e=m%10;
27         if((a+b+c+d+e==n)&&a==e&&b==d){
28             printf("%d\n",m);
29         }
30         m++;
31     }
32     int k=100001;
33     while(k<1000000){
34         int a=k/100000;
35         int b=(k-a*100000)/10000;
36         int c=(k-a*100000-b*10000)/1000;
37         int d=(k-a*100000-b*10000-c*1000)/100;
38         int e=(k-a*100000-b*10000-c*1000-d*100)/10;
39         int f=k%10;
40         if(c==d&&b==e&&a==f&&a+b+c+d+e+f==n){
41             printf("%d\n",k);
42         }
43         k++;
44     }
45     return 0;
46 }

 


  基础练习 特殊的数字  
 
问题描述
  153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。
输出格式
  按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。

 

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string>
 4 #include <algorithm>
 5 #include <queue>
 6 #include <vector>
 7 #include <set>
 8 #include <math.h>
 9 #include <stack>
10 
11 using namespace std;
12 const int maxn=10000;
13 typedef long long ll;
14 int a[70][70];
15 
16 int main(){
17    ios::sync_with_stdio(0);
18    int n;
19    cin>>n;
20    int ans=1;
21    a[1][1]=1;
22    cout<<a[1][1]<<endl;
23    for(int i=2;i<=n;++i){
24        for(int j=1;j<=i;++j){
25            a[i][j]=a[i-1][j-1]+a[i-1][j];
26            if(i!=j){
27                printf("%d ",a[i][j]);
28            }else{
29                printf("%d\n",a[i][j]);
30            }
31        }
32    }
33    return 0;
34 }

 

  基础练习 十进制转十六进制  
 
问题描述
  十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
  给出一个非负整数,将它表示成十六进制的形式。
输入格式
  输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
输出格式
  输出这个整数的16进制表示
样例输入
30
样例输出
1E
 
 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string>
 4 #include <algorithm>
 5 #include <queue>
 6 #include <vector>
 7 #include <set>
 8 #include <math.h>
 9 #include <stack>
10 
11 using namespace std;
12 const int maxn=10000;
13 typedef long long ll;
14 int a[70][70];
15 
16 int main(){
17     ios::sync_with_stdio(0);
18     int n;
19     cin>>n;
20     //printf("%0x\n",n);
21     printf("%0X\n",n);
22     return 0;
23 }

以上是关于蓝桥基础题的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯(基础练习34题)非VIP部分--Java语言

蓝桥杯基础题2017年省赛—九宫幻方

java 蓝桥杯 算法基础 1至2020有多少个质数

蓝桥杯单片机零基础到国二经验分享

蓝桥杯之算法模板题 Python版

蓝桥杯嵌入式第十三届客观题解析