蓝桥杯-练习题(1000-1030)

来源:互联网 发布:淘宝兴奋饮料 编辑:程序博客网 时间:2024/06/07 13:03
1000.A+B 问题

一、题干

Description计算 a+b 的值Input输入一行,两个整数 a,b (0<=a,b<=10)Output a+b 的运算结果Sample Input1 2Sample Output3
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 Input311000000222222222333333333Sample Output12010101230101010340101010
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输出为换算过后的数据,ybitSample Input41MB1KB2B1bitSample Output8388608bit8192bit16bit1bit
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 Input37 32 56 32 1 923 11 2 68 98 2 3 68 1003 5 12 22 1 23 567 876 3 2 56 78Sample Output7 1 9 32 56 3223 11 3 2 68 98 2 68 1003 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 Input35 + 33 – 59 ++ 7Sample Output8-2E
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 Output13456789
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 Input290150Sample Output2 3 3 52 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 Output2 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

 

0 0
原创粉丝点击