蓝桥杯-练习题(1008-1016)

1008.数组元素调整

一、题干

Description
给定一个存放整数的数组,元素个数视输入情况而定,将数组中最小的元素与首元素交换,最大的元素与尾元素交换。
Input
输入由多组测试数据组成。第一行输入一个整数t,表示测试数据的组数。
每组测试数据即为一个数组,输入数组元素的格式为:“数1 数2 … 数n”,“数”与“数”之间以空格隔开。
Output
输出有t行,每行依次对应一个数组的输出。
Sample Input
3
8 21 1 3 9 15 6
78 25 485 12 37
100 41 68 90 -67 248 987 235 185
Sample Output
1 6 8 3 9 15 21 
12 25 37 78 485 
-67 41 68 90 100 248 185 235 987 
View Code

二、代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;


public class T8 {

    /**
     * 接收输入的,然后排序(从小到大),得到最大数和最小数的值,
     * 然后跟原数组交换
     */
    public static void main(String[] args) throws IOException {
        Scanner s=new Scanner(System.in);

        int conut=Integer.parseInt(s.nextLine());
        
        String[] arrStrings=new String[conut];
        
        for (int i = 0; i < arrStrings.length; i++) {
            
            arrStrings[i]=s.nextLine();
            
        }
        
        for (int i = 0; i < arrStrings.length; i++) {
            
            getpaixu(arrStrings[i]);
            
        }
    }
    private static void getpaixu(String str) {

        String[] sarr=str.split(" ");
        
        
        int[] arry=new int[sarr.length];
        int[] ret=new int[sarr.length];
        
        for(int i=0;i<sarr.length;i++){
            ret[i]=arry[i]= Integer.parseInt(sarr[i]);
        }
        int[] arryPaixu=arry;
        //给排序
        for(int j=0;j<arryPaixu.length;j++){
            for(int k=0;k<arryPaixu.length;k++){
                if(arryPaixu[j]<arryPaixu[k]){
                    int tmp=arryPaixu[j];
                    arryPaixu[j]=arryPaixu[k];
                    arryPaixu[k]=tmp;
                }
            }
        }
        
        //把最大值,
        for(int co=0;co<ret.length;co++){
            if(arryPaixu[0]==ret[co]){
                int tmp=ret[0];
                ret[0]=ret[co];
                ret[co]=tmp;
            }
            if(arryPaixu[arryPaixu.length-1]==ret[co]){
                int tmp=ret[ret.length-1];
                ret[arryPaixu.length-1]=ret[co];
                ret[co]=tmp;
            }
        }
        
        for(int co=0;co<ret.length;co++){
            System.out.print(ret[co]+" ");
        }
        System.out.println();
    }
}
View Code

 

1009.谁在说谎

一、题干

 Description
张三说李四在说谎,李四说王五在说谎,王五说张三和李四在说谎,请问:这三人中到底谁说的是真话,谁说的是假话?
Input
无输入
Output
按“XX said is true/false”格式输出结果,每一个的输出占一行。(样例输出只是格式提示)
Sample Input
无输入
Sample Output
ZhangSan said is true
LiSi said is true
View Code

二、代码

public class T9 {
    public static void main(String[] args) {
        
        for(int A=0;A<2;A++){
            for(int B=0;B<2;B++){
                for(int C=0;C<2;C++){
                    if(((A==0&&B==1)||(A==1&&B==0))&&((B==0&&C==1)||(B==1&&C==0))&&((C==0&&A+B==2)||(C==1&&(A+B)!=2))){
                        System.out.println("ZhangSan said is "+(A==0?true:false));
                        System.out.println("LiSi said is "+(B==0?true:false));
                        System.out.println("WangWu said is "+(C==0?true:false));
                    }
                }
            }
        }
    }
}
View Code

 

1010.兔子产仔

一、题干

Description
一般而言,兔子在出生2个月后就有繁殖能力,一对兔子每个月能生出一对小兔子来,如果所有兔子都不死,那么经过n个月总共有多少对兔子?
Input
输入由多组测试数据组成。第一行输入一个整数t,表示测试数据的组数。
接下来的t行,每行输入一个月份n。
Output
输出有t行,每行依次对应一个月份n的输出结果:经过n个月,每个月有多少对兔子。
Sample Input
3
5
10
13
Sample Output
1 1 2 3 5 
1 1 2 3 5 8 13 21 34 55 
1 1 2 3 5 8 13 21 34 55 89 144 233
View Code

二、代码

import java.util.Scanner;


public class T10 {

    /**
     * 一般而言,兔子在出生2个月后就有繁殖能力,一对兔子每个月能生出一对小兔子来,
     * 如果所有兔子都不死,那么经过n个月总共有多少对兔子?
     */
    public static void main(String[] args) {

        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        
        int[] arr=new int[n];
        for (int i = 0; i < arr.length; i++) {
            arr[i]=scanner.nextInt();
            
        }
        
        for (int j = 0; j < arr.length; j++) {

            for (int i = 1; i <= arr[j]; i++) {
                System.out.print(getMoney(i)+" ");
            }
            System.out.println();
        }


    }
    //递归方法
    public static int getMoney(int n){
        if(n==1||n==2)
            return 1;
        else {
            return getMoney(n-1)+getMoney(n-2);
        }
    }
}
View Code

 

1011.回文数

一、题干

Description
一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
Input
输入任意五位数
Output
如果是回文数则输出“true”
如果不是回文数则输出“false”
Sample Input
12321
Sample Output
true
View Code

二、代码

import java.util.Scanner;


public class T11 {

    /**
     * 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
     */
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        
        int n=scanner.nextInt();
        
        if (n<10000||n>=100000) {
            System.out.println("这不是一个五位数");
            return;
        }
        
        if (n%10==n/10000) {
            if (n/10%10==n/1000%10) {
                System.out.println("true");
            }else{
                System.out.println("false");
            }
        }else{
            System.out.println("false");
        }

    }

}
View Code

 

1012.字符串连接

一、题干

Description
两个字符串连接
Input
输入任意两个字符串
Output
输出两个字符串连接后的字符串
Sample Input
adc
ert
Sample Output
adcert
View Code

二、代码

import java.util.Scanner;


public class T12 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        
        Scanner scanner=new Scanner(System.in);
        String s1=scanner.next();
        String s2=scanner.next();
        
        //concat字符串连接
        String string=s1.concat(s2);
        
        System.out.println(string);
    }

}
View Code

 

1013.求和

一、题干

Description
输出1+2!+3!+...+20!的和
Input
无输入
Output
计算结果。(样例输出仅仅是格式提示)
Sample Input
无输入
Sample Output
123456789
View Code

二、代码

import java.math.BigInteger;


public class T13 {

    /**
     * 输出1+2!+3!+...+20!的和
     */
    public static void main(String[] args) {
        
        BigInteger sum=BigInteger.valueOf(0);
        for (int i = 1; i <= 20; i++) {
            sum=sum.add(getNum(i));
        }
        
        System.out.println(sum);
    }
    //递归求阶乘
    public static BigInteger getNum(int n){
        if (n==1) {
            return BigInteger.valueOf(1);
        }else if (n==2) {
            return BigInteger.valueOf(2);
        }else{
            return getNum(n-1).multiply(BigInteger.valueOf(n));
        }
    }
}
View Code

 

1014.统计字符个数

一、题干

Description
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
Input
输入任意字符
Output
统计出其中英文字母、空格、数字和其它字符的个数,并依次输出。
Sample Input
sddf 123 !!!
Sample Output
4
3
2
3
View Code

二、代码

import java.util.Scanner;


public class T14 {

    /**
     * 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
     */
    public static void main(String[] args) {
        
        Scanner scanner=new Scanner(System.in);
        
        int yinwen=0,kongge=0,shuzi=0,qita=0;
        
        String string=scanner.nextLine();
        
        kongge=string.length();

        kongge-=string.length();
        
        for (int i = 0; i < string.length(); i++) {
            char a=string.charAt(i);
            if ((a>='a'&&a<='z')||(a>='A'&&a<='Z')) {
                yinwen++;
            }else if (a-48>=0&&a-48<=9) {
                shuzi++;
            }else if (a==32) {
                kongge++;
            }else{
                qita++;
            }
        }
        
        System.out.println(yinwen);
        System.out.println(shuzi);
        System.out.println(kongge);
        System.out.println(qita);
    }

}
View Code

 

1015.最大公约数最小公倍数

一、题干

Description
输入两个正整数m和n,求其最大公约数和最小公倍数。
Input
输入任意两个正整数
Output
输出两行,分别是输入两个数的最小公约数和最大公倍数
Sample Input
10
8
Sample Output
2
40
View Code

二、代码

import java.util.Scanner;


public class T15 {

    /**
     * 输入两个正整数m和n,求其最大公约数和最小公倍数。
     */
    public static void main(String[] args) {

        Scanner scanner=new Scanner(System.in);
        
        int a=scanner.nextInt();
        int b=scanner.nextInt();
        
        System.out.println(geiMin(a,b));
        System.out.println(geiMax(a,b));
    }
    //最大公约数
    public static int geiMin(int a,int b) {
        
        for (int i = a<b?a:b; i > 1; i--) {
            if (a%i==0&&b%i==0) {
                return i;
            }
        }
        return 1;
    }
    
    //最小公倍数
    public static int geiMax(int a,int b) {
        int ret=0;
        for (int i = 1; ; i++) {
            if (a*i%b==0) {
                ret = a*i;
                break;
            }
        }
        return ret;
    }
}
View Code

 

 

posted @ 2016-11-07 19:53  占位符,😐!  阅读(312)  评论(0编辑  收藏  举报