zoukankan      html  css  js  c++  java
  • 蓝桥练习系统试题笔记C++——基础练习

    1.闰年判断

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

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

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

    2. 年份是400的倍数。

    其他的年份都不是闰年。

    #include<stdio.h>
    bool isLeap(int y)
    {
        if ( (y%4==0 && y%100!=0) || y%400==0 )
        return true;
        else
        return false;
    }
    
    int main()
    {
        int y;
        scanf("%d",&y);
        if(isLeap(y))
          printf("yes");
        else
        printf("no");    
    }

    2.01字串

    对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:

    00000

    00001

    00010

    00011

    00100

    请按从小到大的顺序输出这32种01串。

    #include<stdio.h>
    int main()
    {
        int a,b,c,d,e;
        for(a=0;a<=1;a++)
        {
            for(b=0;b<=1;b++)
            {
                for(c=0;c<=1;c++)
                {
                    for(d=0;d<=1;d++)
                    {
                        for(e=0;e<=1;e++)
                        {
                            printf("%d%d%d%d%d
    ",a,b,c,d,e);
                        }
                    }
                }
            }
        }
        return 0;
    }

    3.字母图形

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

    ABCDEFG

    BABCDEF

    CBABCDE

    DCBABCD

    EDCBABC

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

    笔者找到的规律是以A为对称点向两边发#include<stdio.hint main()

    {
        int n,m;
        char a[26][26]={0};
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++)
        {
            int str='A';
            for(int j=i;j<m;j++)
            {
                a[i][j]=str++;
            }
            str='A';
            for(int j=i-1;j>=0;j--)
            {
                a[i][j]=++str;
            }
        }

    /*下面这个循环本来写的是单层输出,效果一样,但是蓝桥系统不通过,改双层就过了

       for(int i=0;i<n;i++)
       {
          printf("%s ",a[i]);
       }

      */

    for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                printf("%c",a[i][j]);
            }
            printf("
    ");
        }
        return 0;
     } 

    4.数列特征

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

    #include<stdio.h>
    int main()
    {
        int n,a[10000],sum=0;
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            sum=sum+a[i];
        }
        int max=a[0],min=a[0];
        for(int i=1;i<n;i++)
        {
            if(a[i]>max) max=a[i];
            if(a[i]<min) min=a[i];
        }
        printf("%d
    ",max);
        printf("%d
    ",min);
        printf("%d",sum);
        return 0; 
     } 

    5.查找整数

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

    #include<stdio.h>
    int main()
    {
        int n,str[10000],a;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&str[i]);
        }
        scanf("%d",&a);
        int flag=0;
        for(int i=1;i<=n;i++)
        {
            if(str[i]==a)
            {
                flag=i;
                break;
            }
        }
        if(flag==0) printf("-1");
        else printf("%d",flag);
        return 0;
    }

    6.杨辉三角形

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

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

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

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

    基本思想:第一个循环输出行数(1 <= n <= 34)
    第二个循环输出改行里的数(n行有n个数)
    n>=3时,a[i][j]=a[i-1][j-1]+a[i-1][j]
    n<3时,a[i][j]=1

    #include<stdio.h>
    int main()
    {
        int n;
        scanf("%d",&n);
        int a[35][35]={0};
        a[1][1]=1,a[2][1]=1,a[2][2]=1;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=i;j++)
            {
                if(i==1 || i==2)
                    printf("%d ",a[i][j]);
                else
                {
                   a[i][j]=a[i-1][j-1]+a[i-1][j];
                   printf("%d ",a[i][j]);
                }
            }
            printf("
    ");
        }
        return 0;
    }

     7.特殊的数字

    153是一个非常特殊的数,它等于它的每位数字的立方和,即
    153=1*1*1+5*5*5+3*3*3。
    编程求所有满足这种条件的三位十进制数。

    #include<stdio.h>
    int main()
    {
        int g,s,b;
        for(int i=100;i<1000;i++)
        {
            g=i%10;
            s=(i/10)%10;
            b=i/100;
            if(i==g*g*g+s*s*s+b*b*b)
                printf("%d
    ",i);    
        }
        return 0;
     } 

    8.回文数

    1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。

    #include<stdio.h>
    int main()
    {
        int g,s,b,q;
        for(int i=1000;i<10000;i++)
        {
            g=i%10;
            s=(i/10)%10;
            b=(i/100)%10;
            q=i/1000;
            if(g==q && s==b)
             printf("%d
    ",i);
        }
        return 0;
    }

    9.特殊回文数

    123321是一个非常特殊的数,它从左边读和从右边读是一样的。
      输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。

    基本思想:for(i从10000到1000000)
    {
    假设i是回文数
    sum=i各个位的数字之和
    判断sum是否等于且i是否是回文数
    是就输出
    }

    #include<stdio.h>
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i=10000;i<1000000;i++)
        {
            int sum=0,ishuiwen=0,ti=i; 
            while(ti>0)
            {
                ishuiwen=ishuiwen*10+ti%10;
                sum=sum+ti%10;
                ti=ti/10;
            }
            if(sum==n && ishuiwen==i)
            {
                printf("%d
    ",i);
            }
        }
        return 0;
     } 

    10.十进制转十六进制

    十六进制数是在程序设计时经常要使用到的一种整数的表示方式。
    它有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),将它表示成十六进制的形式。

    #include<stdio.h>
    int main()
    {
        int a,yu;
        scanf("%d",&a);
        char cun[20];
        if(a==0)
          printf("%d
    ",a);
        int i=0;
        while(a>0)
        {
            yu=a%16;
            a=a/16;
            if(yu==0) cun[i++]='0';
            if(yu==1) cun[i++]='1';
            if(yu==2) cun[i++]='2';
            if(yu==3) cun[i++]='3';
            if(yu==4) cun[i++]='4';
            if(yu==5) cun[i++]='5';
            if(yu==6) cun[i++]='6';
            if(yu==7) cun[i++]='7';
            if(yu==8) cun[i++]='8';
            if(yu==9) cun[i++]='9';
            if(yu==10) cun[i++]='A';
            if(yu==11) cun[i++]='B';
            if(yu==12) cun[i++]='C';
            if(yu==13) cun[i++]='D';
            if(yu==14) cun[i++]='E';
            if(yu==15) cun[i++]='F';
        }
        for(int j=i-1;j>=0;j--)
         printf("%c",cun[j]);
        printf("
    ");
        return 0;
    }

    11.十六进制转十进制

    从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
      注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char str[9];
        long long num=0;
        scanf("%s",&str);
        for(int i=0;i<strlen(str);i++)
        {
            if(str[i]>='0' && str[i]<='9')
              num=num*16+str[i]-'0';
            if(str[i]>='A' && str[i]<='F')
              num=num*16+str[i]-'A'+10;
        }
        printf("%lld",num);
        return 0;
     } 

    12.16进制转8进制

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

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

    16转10转8(系统不通过,可能和数类型有关)

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int n;
        char str[11][100000];
        int sum;
        int yu;
        int ei[200000];
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            scanf("%s",str[i]);
        }
        for(int i=0;i<n;i++)
        {
            sum=0;
            for(int j=0;j<strlen(str[i]);j++)
            {
                if(str[i][j]>='0' && str[i][j]<='9')
                    sum=sum*16+str[i][j]-'0';
                if(str[i][j]>='A' && str[i][j]<='F')
                    sum=sum*16+str[i][j]-'A'+10;
            }
            int k=0;
            while(sum!=0)
            {
                ei[k++]=sum%8;
                sum=sum/8;
            }
            for(int m=k-1;m>=0;m--)
            {
                printf("%d",ei[m]);
            }
            printf("
    ");
        }
        return 0;    
     } 

    16转2转8(输出不符合题目要求,可添加一个二维数组过度,笔者没有耐心了,暂时不改了)

    #include<stdio.h>
    #include<string.h>
    #include<stack>
    #include<math.h>
    using namespace std;
    int main()
    {
        int n;
        char str[100000];
        stack<int> two1;
        int two2[400000];
        stack<int> eight;
        scanf("%d",&n);
        int k=0;
        while(n!=0)
        {
            scanf("%s",str);
            for(int i=0;i<strlen(str);i++) //16进制改2进制 
            {
                int temp;
                if(str[i]>='0' && str[i]<='9')
                   temp=str[i]-'0';
                if(str[i]>='A' && str[i]>='F')
                   temp=str[i]-'A'+10;
                   
                int flag;
                for(int j=0;j<4;j++)
                {
                    flag=temp%2;
                    temp=temp/2;
                    two1.push(flag);
                }
                for(int m=0;m<4;m++)
                {
                    two2[k++]=two1.top();
                    two1.pop();
                }
            }
            
            int quan=0,sum=0;
            for(int i=k-1;i>=0;i--) //2进制转8进制 
            {
                sum+=two2[i]*pow(2,quan);
                while((quan+1)%3==0)
                {
                    eight.push(sum);
                    quan=-1;
                    sum=0;
                }
                quan++;    
            }
            n--;
        }
        
        while(eight.empty()!=true){
            printf("%d",eight.top());
            eight.pop();
        }
        return 0;
    }
  • 相关阅读:
    简单布局2
    面试问题之操作系统:Linux下进程的内存结构
    面试问题之C++语言:说一说C++中四种cast转换
    面试问题之C++语言:说一下static关键字的作用
    面试问题之操作系统:动态链接库和静态链接库的区别
    面试问题之数据结构与算法:简述深度优先遍历和广度优先遍历
    面试问题之C++语言:C与C++的区别
    面试问题之C++语言:Overload、Override及Overwirte的区别
    面试问题之计算机网络:TCP三次握手四次挥手
    面试问题之计算机网络:TCP滑动窗口
  • 原文地址:https://www.cnblogs.com/blog-address/p/12436686.html
Copyright © 2011-2022 走看看