蓝桥杯基础练习解题集

蓝桥杯基础题题目列表

BASIC-13 数列排序

#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=1e5;
int a[maxn];

int main()
{
    int n;
    //int  
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>a[i];
    sort(a,a+n);
    for(int i=0;i<n;i++)
        cout<<a[i]<<" ";
    cout<<endl;
    return 0;
}

BASIC-12 十六进制转八进制
思路:
先将十六进制转化为4位一组二进制;然后将二进制3位一组转化为8进制;

#include<iostream>
#include<cmath>
#include<string>
using namespace std;
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        string s1,s2;
        cin>>s1;
        s2="";
        for(int i=0;i<s1.length();i++)
        {
            switch(s1[i])
            {
                case '0':s2+="0000";break;
                case '1':s2+="0001";break;
                case '2':s2+="0010";break;
                case '3':s2+="0011";break;
                case '4':s2+="0100";break;
                case '5':s2+="0101";break;
                case '6':s2+="0110";break;
                case '7':s2+="0111";break;
                case '8':s2+="1000";break;
                case '9':s2+="1001";break;
                case 'A':s2+="1010";break;
                case 'B':s2+="1011";break;
                case 'C':s2+="1100";break;
                case 'D':s2+="1101";break;
                case 'E':s2+="1110";break;
                case 'F':s2+="1111";break;
                default:break;
            }
        }
        int len=s2.length();
        if(len%3==1)
            s2="00"+s2;
        if(len%3==2)
            s2="0"+s2;
        int num=0;
        int flag=0;
        for(int j=0;j<s2.length();j+=3)
        {
            num=4*(s2[j]-'0')+2*(s2[j+1]-'0')+(s2[j+2]-'0');
            if(num)
                flag=1;
            if(flag)
                cout<<num;
        }
        cout<<endl;
    }
    return 0;
}

java版
这道题的限制比较多,因为最开始说的是十六进制数的长度不超过100000,而long类型才十九位,肯定不能用系统自带的进制转换方法,需要自己写

import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String[] sts = new String[n];
        for(int i=0;i<n;i++){
            sts[i] = sc.next();
        }
        sc.close();
        for(int i=0;i<n;i++){
            String strBinary = toBinary(sts[i]);
            int len_strBin = strBinary.length();
            if(len_strBin%3==1) strBinary = "00"+strBinary;
            if(len_strBin%3==2) strBinary = "0"+strBinary;
            String strOctal = toOctal(strBinary);
            System.out.println(strOctal);
        }
    }
    private static String toOctal(String strBinary) {
        int len = strBinary.length();
        int k;
        StringBuffer stb = new StringBuffer();
        if(strBinary.substring(0, 3).equals("000"))
            k=3;
        else
            k=0;
        for(int i=k;i<len-2;i+=3){
            switch (strBinary.substring(i, i+3)) {
                case "000":stb.append("0");break;
                case "001":stb.append("1");break;
                case "010":stb.append("2");break;
                case "011":stb.append("3");break;
                case "100":stb.append("4");break;
                case "101":stb.append("5");break;
                case "110":stb.append("6");break;
                case "111":stb.append("7");break;
                default:break;
            }
        }
        return stb.toString();
    }
    private static String toBinary(String strHex) {
        int len_str = strHex.length();
        StringBuffer stb = new StringBuffer();
        for(int i=0;i<len_str;i++){
            switch (strHex.charAt(i)) {
                case '0':stb.append("0000");break;
                case '1':stb.append("0001");break;
                case '2':stb.append("0010");break;
                case '3':stb.append("0011");break;
                case '4':stb.append("0100");break;
                case '5':stb.append("0101");break;
                case '6':stb.append("0110");break;
                case '7':stb.append("0111");break;
                case '8':stb.append("1000");break;
                case '9':stb.append("1001");break;
                case 'A':stb.append("1010");break;
                case 'B':stb.append("1011");break;
                case 'C':stb.append("1100");break;
                case 'D':stb.append("1101");break;
                case 'E':stb.append("1110");break;
                case 'F':stb.append("1111");break;
                default:break;
            }
        }
        return stb.toString();
    }
}

BASIC-11 十六进制转十进制



#include<iostream>
#include<cmath>
#include<string>
#include<math.h>
using namespace std;
int main()
{
    int n;
        string s1,s2;
        cin>>s1;
        s2="";
        for(int i=0;i<s1.length();i++)
        {
            switch(s1[i])
            {
                case '0':s2+="0000";break;
                case '1':s2+="0001";break;
                case '2':s2+="0010";break;
                case '3':s2+="0011";break;
                case '4':s2+="0100";break;
                case '5':s2+="0101";break;
                case '6':s2+="0110";break;
                case '7':s2+="0111";break;
                case '8':s2+="1000";break;
                case '9':s2+="1001";break;
                case 'A':s2+="1010";break;
                case 'B':s2+="1011";break;
                case 'C':s2+="1100";break;
                case 'D':s2+="1101";break;
                case 'E':s2+="1110";break;
                case 'F':s2+="1111";break;
                default:break;
            }
        }
        int len=s2.length();
        if(len%3==1)
            s2="00"+s2;
        if(len%3==2)
            s2="0"+s2;
        long long num=0;
        for(int j=0;j<s2.length();j++)
        {
            double tmp=s2.length()-j-1;
            num=num+pow(2,tmp)*(s2[j]-'0');
        }
        cout<<num<<endl;
    return 0;
}

java版

import java.util.Scanner;
public class Main{
    public static void main(String[]args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String hex=sc.nextLine();
            System.out.println(Long.parseLong(hex,16));
        }
    }

}

BASIC-10 十进制转十六进制

//package com.bryce1010.demo;


import java.util.Scanner;
import java.math.*;
import java.text.*;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in=new Scanner(System.in);
        Integer n=in.nextInt();
        in.close();
        System.out.println(Integer.toHexString(n).toUpperCase());
    }

}

BASIC-9 特殊回文数

#include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int n1=10001;
    while(n1<100000)
    {
        int a,b,c,d,e;
        a=n1/10000;
        b=n1%10000/1000;
        c=n1%1000/100;
        d=n1%100/10;
        e=n1%10;
        if(a+b+c+d+e==n&&a==e&&b==d)
            cout<<n1<<endl;
            n1++;
    }
    int n2=100001;
    while(n2<1000000)
    {
        int a,b,c,d,e,f;
        a=n2/100000;
        b=n2%100000/10000;
        c=n2%10000/1000;
        d=n2%1000/100;
        e=n2%100/10;
        f=n2%10;
        if(a+b+c+d+e+f==n&&a==f&&b==e&&c==d)
            cout<<n2<<endl;
            n2++;
    }
    return 0;
}

BASIC-8 回文数

#include<iostream>
using namespace std;
int main()
{
    int n=1001;
    while(n<10000)
    {
        int a,b,c,d;
        a=n/1000;
        b=n%1000/100;
        c=n%100/10;
        d=n%10;
        if(a==d&&b==c)
            cout<<n<<endl;
        n++;
    }
    return 0;
}

BASIC-7 特殊的数字

#include<iostream>
using namespace std;
int main()
{
    int n=101;
    while(n<1000)
    {
        int a,b,c;
        a=n/100;
        b=n%100/10;
        c=n%10;
        if(a*a*a+b*b*b+c*c*c==n)
            cout<<n<<endl;
        n++;
    }
    return 0;
}

BASIC-6 杨辉三角形

#include<iostream>

using namespace std;

int trangle[50][50];
int main()
{
    int n;
    cin>>n;
    trangle[1][1]=1;
    trangle[2][1]=1;trangle[2][2]=1;
    if(n==1)
        cout<<trangle[1][1]<<endl;
    else if(n==2)
        {
            cout<<trangle[1][1]<<endl;
            cout<<trangle[2][1]<<" "<<trangle[2][2]<<endl;
        }
    else
    {
        cout<<trangle[1][1]<<endl;
        cout<<trangle[2][1]<<" "<<trangle[2][2]<<endl;
        for(int i=3;i<=n;i++)
        {
            for(int j=1;j<=i;j++)
            {
                trangle[i][j]=trangle[i-1][j-1]+trangle[i-1][j];
                cout<<trangle[i][j]<<" ";
            }
            cout<<endl;
        }
    }
    return 0;
}

BASIC-5 查找整数

#include<iostream>

using namespace std;

int num[1005];
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>num[i];
    }
    int findnum;
    cin>>findnum;
    int flag=0;
    for(int i=0;i<n;i++)
    {
        if(num[i]==findnum)
            {
                cout<<(i+1)<<endl;
                flag=1;
                break;
            }
    }
    if(flag==0)
        cout<<-1<<endl;
    return 0;

}

BASIC-4 数列特征

#include<iostream>

using namespace std;

int num[10005];
int main()
{
    int n;
    cin>>n;
    int maxnum=-10001,minnum=10001,sum=0;
    for(int i=0;i<n;i++)
    {
        cin>>num[i];
        sum+=num[i];
        maxnum=max(maxnum,num[i]);
        minnum=min(minnum,num[i]);
    }
    cout<<maxnum<<endl;
    cout<<minnum<<endl;
    cout<<sum<<endl;
    return 0;

}

BASIC-3 字母图形
思路:会发现每个字母跟它的位置的横纵坐标的绝对值有关系。

#include<iostream>
#include<math.h>
using namespace std;

int main()
{
    int n,m;
    char ch;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            ch=char(65+abs(j-i));
            cout<<ch;
        }
        cout<<endl;
    }
    return 0;
}

BASIC-2 01字串

#include<iostream>
#include<math.h>
using namespace std;

int main()
{
    for(int i=0;i<=1;i++)
    {
        for(int j=0;j<=1;j++)
        {
            for(int k=0;k<=1;k++)
            {
                for(int h=0;h<=1;h++)
                {
                    for(int m=0;m<=1;m++)
                    {
                        cout<<i<<j<<k<<h<<m;
                        cout<<endl;
                    }
                }
            }
        }
    }
    return 0;
}

BASIC-1 闰年判断

#include<iostream>
#include<math.h>
using namespace std;

int main()
{
    int n;
    cin>>n;
    int flag=0;
    if(n%4==0&&n%100!=0)
    {
        cout<<"yes"<<endl;
        flag=1;
    }
    else if(n%400==0&&flag==0)
        cout<<"yes"<<endl;
    else cout<<"no"<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/bryce1010/p/9387002.html