zoukankan      html  css  js  c++  java
  • 蓝桥杯-练习题(1000-1030)

    1000.A+B 问题

    一、题干

    Description
    计算 a+b 的值
    Input
    输入一行,两个整数 a,b (0<=a,b<=10)
    Output
     a+b 的运算结果
    Sample Input
    1 2
    Sample Output
    3
    View Code

    二、分析

    比较简单
    1、接收,空格分割,数据类型转换
    View Code

    三、代码

    package 模拟;
    
    import java.util.Scanner;
    
    public class T1 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
    
    
            Scanner scanner=new Scanner(System.in);
            
            String aString=scanner.nextLine();
            
            String[] arrStrings=aString.split(" ");
            
            int a=Integer.parseInt(arrStrings[0]);
            
            int b=Integer.parseInt(arrStrings[1]);
            
            System.out.println(a+b);
    
        }
    
    }
    View Code

    1001.不重复数

    一、题干

    Description
    给定N是一个正整数,求比N大的最小“不重复数”,这里的不重复是指没有两个相等的相邻位,如1102中的11是相等的两个相邻位故不是不重复数,而12301是不重复数。
    Input
    输入由多组测试数据组成。第一行输入一个整数t,表示测试数据的组数。
    接下来的t行,每行输入一个数。
    Output
    输出有t行,每行依次对应一组测试数据的运算结果。
    Sample Input
    3
    11000000
    222222222
    333333333
    Sample Output
    12010101
    230101010
    340101010
    View Code

    二、分析

    当时觉得比较难,现在感觉还好
    1、穷举法
    2、判断是否有重复的
    3、字符串的截取,charAt();
    View Code

    三、代码

    package 模拟;
    
    import java.util.Scanner;
    
    public class T2 {
    
        public static void main(String[] args) {
    
            Scanner scanner=new Scanner(System.in);
            
            int conut=scanner.nextInt();
            
            int[] arr=new int[conut];
            
            for (int i = 0; i < arr.length; i++) {
                
                int in=scanner.nextInt();
                arr[i]=getMinNum(in);
                
            }
            
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
                
            }
        }
    
        //找最小的数
        private static int getMinNum(int in) {
            
            for ( in+=1; ; in++) {
                
                if (getCf(in)) {
                    return in;
                }
                
            }
        }
    
        //判断是否有重复的,转成string比较好判断些
        private static boolean getCf(int in) {
            
            String string=in+"";
            
            for (int i = 0; i < string.length()-1; i++) {
                
                if (string.charAt(i)==string.charAt(i+1)) {
                    return false;
                }
                
            }
            
            return true;
        }
    
    }
    View Code

    1002.单位转换

    一、题干

    Description
    在计算机存储里面的单位转换。我们都知道1MB=1024KB,1KB=1024B,1B=8bit,试编程实现单位转换。
    Input
    输入由多组测试数据组成。首先输入一个整数n,表示测试数据的数目。
    接下来的n行,每行表示一个未化简的数据,如xMB,xKB,xB,xbit,(1≤x≤50)
    Output
    输出为换算过后的数据,ybit
    Sample Input
    4
    1MB
    1KB
    2B
    1bit
    Sample Output
    8388608bit
    8192bit
    16bit
    1bit
    View Code

    二、分析

    还是很简单的
    1、接收一个字符串
    2、提取后面的单位,提取数字部分
    3、endsWith();的使用,直接判断结尾
    View Code

    三、代码

    package 模拟;
    
    import java.util.Scanner;
    
    public class T3 {
    
        public static void main(String[] args) {
            
            Scanner scanner=new Scanner(System.in);
            
            int conut=scanner.nextInt();
            
            String[] arr=new String[conut];
            
            for (int i = 0; i < arr.length; i++) {
                
                String in=scanner.next();
                arr[i]=getZh(in);
                
            }
            
            for (int i = 0; i < arr.length; i++) {
                
                 System.out.println(arr[i]);
                
            }
    
        }
    
        private static String getZh(String nextLine) {
            
            int le=nextLine.length();
            String reString="";
            
            if (nextLine.endsWith("MB")) {
    
                reString=Integer.parseInt(nextLine.substring(0, le-2))*1024*1024*8 +"bit";
                
            }else if (nextLine.endsWith("KB")) {
                
                reString=Integer.parseInt(nextLine.substring(0, le-2))*1024*8 +"bit";
                
            }else if(nextLine.endsWith("B")){
                
                reString=Integer.parseInt(nextLine.substring(0, le-1))*8 +"bit";
                
            }else if (nextLine.endsWith("bit")) {
                
                reString=nextLine;
                
            }
            return reString;
        }
    
    }
    View Code

    1003.奇偶排序

    一、题干

    Description
    给定一个存放正数的数组,元素个数视输入情况而定,重新排列数组使得数组左边为奇数,右边为偶数,且保证奇数和偶数之间元素相对位置不变。
    Input
    输入由多组测试数据组成。第一行输入一个整数t,表示测试数据的组数。
    输入字符串的格式为:“操作数1 操作数2 … 操作数n”,“操作数”与“操作数”之间以一个空格隔开。
    Output
    输出有t行,每行依次对应一组测试数据的运算结果。
    Sample Input
    3
    7 32 56 32 1 9
    23 11 2 68 98 2 3 68 100
    3 5 12 22 1 23 567 876 3 2 56 78
    Sample Output
    7 1 9 32 56 32
    23 11 3 2 68 98 2 68 100
    3 5 1 23 567 3 12 22 876 2 56 78
    View Code

    二、分析

    1、接收输入的字符串,转成int型数组
    2、前面放奇数,后面放偶数的(相对位置不变)
    3、也不难,先把所有的奇数找出来放在前面,在来找偶数的
    View Code

    三、代码

    package 模拟;
    
    import java.io.IOException;
    import java.util.Scanner;
    
    public class T4 {
    
        public static void main(String[] args) throws IOException {
    
            Scanner scanner=new Scanner(System.in);
            
            String con=scanner.nextLine();
            int conut=Integer.parseInt(con);
            
            //用数组装起来
            String[] arrStrings=new String[conut];
            
            for (int i = 0; i < arrStrings.length; i++) {
                
                //读取一个带空格的字符串
                //PS:用scanner.nextLine有问题、用scanner.next会以空格来结束
                //百度到用bufferedReader.readLine()
                //在自己电脑上测试可以,上传网上测不通过
                
                String inString=scanner.nextLine();
                arrStrings[i]=getArr(inString);
                
            }
            
            //输出
            for (int i = 0; i < arrStrings.length; i++) {
                
                System.out.println(arrStrings[i]);
                
            }
    
        }
    
        //奇数放前面,偶数放后面
        private static String getArr(String inString) {
            
            //转成字符串数组
            String[] strArrStrings=inString.split(" ");
            
            String re="";
            
            //奇数
            for (int i = 0; i < strArrStrings.length; i++) {
                
                if (Integer.parseInt(strArrStrings[i])%2==1) {
                    re=re+strArrStrings[i]+" ";
                }
                
            }
            //偶数
            for (int i = 0; i < strArrStrings.length; i++) {
                
                if (Integer.parseInt(strArrStrings[i])%2==0) {
                    re=re+strArrStrings[i]+" ";
                }
                
            }
            re=re.substring(0, re.length()-1);
            return re;
        }
    
    }
    View Code

    1004.算术运算

    一、题干

    Description
    通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
    补充说明:
    1. 操作数为正整数,不需要考虑计算结果溢出的情况。
    2. 若输入算式格式错误,输出结果为“E”。
    Input
    输入由多组测试数据组成。第一行输入一个整数t,表示测试数据的组数。
    输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。
    Output
    输出有t行,每行依次对应一组测试数据的运算结果。
    Sample Input
    3
    5 + 3
    3 – 5
    9 ++ 7
    Sample Output
    8
    -2
    E
    View Code

    二、分析

    同1001题,无他的

    三、代码

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Scanner;
    
    
    public class T4 {
    
        /**
         * @param args
         * @throws IOException 
         */
        public static void main(String[] args) throws IOException {
            
            Scanner scanner=new Scanner(System.in);
            BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
            
            int conut=scanner.nextInt();
            
            String[] arrString=new String[conut];
            
            for (int i = 0; i < arrString.length; i++) {
                
                arrString[i]=bufferedReader.readLine();
                
            }
            
            for (int i = 0; i < arrString.length; i++) {
                System.out.println(getNum(arrString[i]));
                
            }
            
        }
        public static String getNum(String s) {
            String sArrString[]=s.split(" ");
            
            String ret="E";
            try {
                if (sArrString[1].equals("+")) {
                    ret=Integer.parseInt(sArrString[0])+Integer.parseInt(sArrString[2])+"";
                }
                if (sArrString[1].equals("-")) {
                    ret=Integer.parseInt(sArrString[0])-Integer.parseInt(sArrString[2])+"";
                }
            } catch (Exception e) {
    
            }
            return ret;
        } 
    }
    View Code

    1005.奇偶排序

    一、题干

    Description
    将10000块钱兑换成由5000块、2000块、1000块、500块、100块、50块、10块、5块、1块的组成的零钱,问有多少种兑换方式?
    Input
    无输入
    Output
    运算结果。
    
    样例输出中的结果不正确,只是格式提示
    
    Sample Input
    无输入
    Sample Output
    13456789
    View Code

    二、分析

        /**
         * 将10000块钱兑换成由5000块、2000块、1000块、500块、100块、50块、10块、5块、1块的组成的零钱,问有多少种兑换方式?
         * 
         * 参考来自:http://www.cnblogs.com/lekko/archive/2013/04/05/3000403.html
         * 
         * 一般的都是写八九层循环做的,
         * 优化:
         *     1、循环次数的控制(动态的控制,根据上层循环得结果来决定下层循环的次数)
         *     2、每层计算循环的结果:sum[],省的每次都要重新计算一次
         *     3、最后一层,到5和1的时候,直接(10000-sum[6])/5就可得到5的次数,1不用考虑
         */
    View Code

    三、代码

    (答案:24597373438)

    package 模拟;
    
    public class T6 {
    
        /**
         * 将10000块钱兑换成由5000块、2000块、1000块、500块、
         * 100块、50块、10块、5块、1块的组成的零钱,问有多少种兑换方式?
         */
        public static void main(String[] args) {
            
            //9种面额的钱
            int[] money=new int[]{5000,2000,1000,500,100,50,10,5,1};
            
            //没个循环后的钱数
            int[] sum=new int[9]; 
            
            //下层循环的次数
            int[] conut=new int[9];
            
            long re=0;
            //5000
            for (int i = 0; i < 3; i++) {
                sum[0]=i*money[0];
                conut[1]=(10000-sum[0])/money[1]+1;
    
                //2000
                for (int j = 0; j < conut[1]; j++) {
                    sum[1]=j*money[1]+sum[0];
                    conut[2]=(10000-sum[1])/money[2]+1;
    
                    //1000
                    for (int k = 0; k < conut[2]; k++) {
                        sum[2]=k*money[2]+sum[1];
                        conut[3]=(10000-sum[2])/money[3]+1;
                        
                        //500
                        for (int k2 = 0; k2 < conut[3]; k2++) {
                            sum[3]=k2*money[3]+sum[2];
                            conut[4]=(10000-sum[3])/money[4]+1;
    
                            //100
                            for (int l = 0; l < conut[4]; l++) {
                                sum[4]=l*money[4]+sum[3];
                                conut[5]=(10000-sum[4])/money[5]+1;
    
                                //50
                                for (int l2 = 0; l2 < conut[5]; l2++) {
                                    sum[5]=l2*money[5]+sum[4];
                                    conut[6]=(10000-sum[5])/money[6]+1;
                                    
                                    //10
                                    for (int m = 0; m < conut[6]; m++) {
                                        sum[6]=m*money[6]+sum[5];
                                        conut[7]=(10000-sum[6])/money[7]+1;
                                        
                                        re+=conut[7];
                                    }
                                }
                            }
                        }
                    }
                }
            }
            System.out.println(re);
        }
    }
    View Code

    1006.分解质因数

    一、题干

    Description
    将一个正整数N分解质因数,比如150=2*3*5*5,其质因数为2 3 5 5。
    Input
    输入由多组测试数据组成。第一行输入一个整数t,表示测试数据的组数。
    接下来的t行,每行输入一个正整数。
    Output
    输出有t行,每行依次对应一组测试数据的输出结果。
    Sample Input
    2
    90
    150
    Sample Output
    2 3 3 5
    2 3 5 5 
    View Code

    二、分析

    1、分解质因数,从2开始除,除不断时,找大一点的再除,直至余数为零
    2、找更大的一个质因数
    3、只能被自己和1整除的数为质因数
    View Code

    三、代码

    package 模拟;
    
    import java.util.Scanner;
    
    public class T7 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            
            Scanner scanner=new Scanner(System.in);
            int conut=Integer.parseInt(scanner.nextLine());
            
            String[] arrString=new String[conut];
            
            for (int i = 0; i < arrString.length; i++) {
                 
                arrString[i]=getZY(scanner.nextLine());
                
            }
            for (int i = 0; i < arrString.length; i++) {
                System.out.println(arrString[i]);
                
            }
            
        }
        
        //分解质因数,从2开始除,除不断时,找大一点的再除,直至余数为零
        private static String getZY(String nextLine) {
            
            int num=Integer.parseInt(nextLine);
            
            int zhi=2;
            
            String reString="";
            
            for ( ;1!=num ; ) {
                if (num%zhi==0) {
                    reString=reString+zhi+" ";
                    num/=zhi;
                }else {
                    zhi=getZHI(zhi);
                }
                
            }
            
            return reString;
        }
        
        //找更大的一个质因数
        private static int getZHI(int zhi) {
            
            for (int i = zhi+1; ; i++) {
                
                for (int j = 2; j < zhi+1/2+1; j++) {
                    
                    if (i%j==0) {
                        break;
                    }
                    
                }
                return i;
            }
        }
    
    }
    View Code

    1007.回文素数

    一、题干

    Description
    回文素数是指,如果一个正整数n从左向右和从右向左读结果都相同且是素数,则称之为回文素数。编程找出1000以内的回文素数
    Input
    无输入
    Output
    输出有若干行,每行输出5个回文素数。(样例输出只是格式提示)
    Sample Input
    无输入
    Sample Output
    2 3 5 7 11 
    101 131 151 181 191 
    View Code

    二、分析

    1、先判断是否为素数
    2、再判断是否为回文数
    View Code

    三、代码

    package 模拟;
    
    public class T8 {
    
        /**
         * 回文素数是指,如果一个正整数n从左向右和从右向左读结果都相同且是素数,
         * 则称之为回文素数。编程找出1000以内的回文素数
         */
        public static void main(String[] args) {
            int co=0;
            
            //判断素数
            for (int i = 2; i < 1000; i++) {
                boolean fa=true;
                for (int j = 2; j < i/2+1; j++) {
                    
                    if (i%j==0) {
                        fa=false;
                        break;
                    }else{
                        fa=true;
                    }
                }
                //是素数的再看是不是回文数
                if (fa) {
                    if (getHui(i)) {
                        co++;
                        System.out.print(i+" ");
                        if (co==5) {
                            System.out.println();
                            co=0;
                        }
                    }
                }
            }
        }
    
        //判断是否为回文数
        private static boolean getHui(int i) {
            
            String aString=i+"";
            int le=aString.length();
            if (le==1) {
                return true;
            }else if (le==2) {
                if (aString.charAt(0)==aString.charAt(1)) {
                    return true;
                }
            }else if (le==3) {
                if (aString.charAt(0)==aString.charAt(2)) {
                    return true;
                }
            }
            return false;
        }
    
    }
    View Code
  • 相关阅读:
    打造自己的 C# WinForm 应用程序的 SQL Server 连接配置界面
    怎么修改app.config的值
    将DATATABLE中的数据导入到数据库中
    C# 多线程使用progressBar进度条控件
    程序员技术练级攻略2
    c#中Setting.setting的使用
    该行已经属于另一个表
    Microsoft 数据访问技术的过去、现在和未来
    Winform专栏
    在 C# 中使用设置 Settings.settings
  • 原文地址:https://www.cnblogs.com/gx-143/p/6034794.html
Copyright © 2011-2022 走看看