• 蓝桥基础题


    问题一:回文数

    问题描述   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<<'
    '<<minn<<'
    '<<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
    ",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
    ",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
    ",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
    ",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);
    21     printf("%0X
    ",n);
    22     return 0;
    23 }
  • 相关阅读:
    C++ 容器元素的存储和获取
    【C++沉思录】代理类
    mysql 编码测试
    理解字符编码
    linux mount
    mysql delimiter
    mysql 求时间段平均值
    mysql Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
    PostgreSQL体系架构与内存结构
    PostgreSQL中的The Oversized-Attribute Storage Technique(TOAST:超大属性存储技术)
  • 原文地址:https://www.cnblogs.com/z-712/p/7846628.html
Copyright © 2020-2023  润新知