zoukankan      html  css  js  c++  java
  • javaSE_Java第一周总结:有难度题目集合

    第一周练习总结
    说明:尽量采用多种做法解决
    1.使用三种方法实现变量交换

    public class Test1Change{
        public static void main(String[] args){
            //1.使用三种方法实现变量交换
            int a=1;
            int b=2;
    
            //1)第三方变量实现交换
            /*
            int c=a;
            a=b;
            b=a;
            */
            //2)数学运算实现交换
            /*
            a=a+b;
            b=a-b;
            a=a-b;
            */
            //3)位运算实现交换
    
            a=a^b;
            b=a^b;
            a=a^b;
    
            System.out.println("a="+a);
            System.out.println("b="+b);
        }
    }
    

    2.设计一个实验证明&和&&的区别

    public class Test2Prove{
        public static void main(String[] args){
            //设计一个实验证明&和&&的区别
    
            //方法一:使用自增自减实现
            int a=2;
            int b=3;
            //若后面运算了,那么a应该为3,若为2,说明未运算
            System.out.println(a>b&&a++>b);
            System.out.println(a);
            //若后面运算了,那么b应该为4,若为3,说明未运算
            System.out.println(a>b&a>b++);
            System.out.println(b);
    
    
            //方法二:用分母不为0做
            //若后面运行则会报错:Exception in thread "main" java.lang.ArithmeticException: / by zero,意思是分母不能为0
            //若后面不运行,则不会报错
            System.out.println(1>2&&2>(5/0));
            System.out.println(1>2&2>(5/0));
        }
    }
    

    3.从键盘录入输入3 个数a,b,c,按从大到小进行输出

    public class Test3Sort{
        public static void main(String[] args){
            //3.从键盘录入输入3 个数a,b,c,按从大到小进行输出
            int a=3,b=6,c=5;
    
            //方法一:
            int max=a>b?a:b;
            max=max>c?max:c;
    
            int min=a<b?a:b;
            min=min<c?min:c;
    
            //获取mid方法一
            /*
            int mid=(a+b+c)-max-min;
            */
            //获取mid方法二
            int mid;
            if(a<max&&a>min){
                mid=a;
            }else{
                mid=(b<max&&b>min)?b:c;
            }
    
    
            System.out.println("a,b,c三个数由大到小排列为:"+max+" "+mid+" "+min);
    
            //方法二:不需要定义三个变量,但过程复杂,穷举法
            if(a>=b){
                if(b>=c){
                    //a>=b b>=c
                    System.out.println("三个数从大到小排列:"+a+"   "+b+"    "+c);
                }else{
                    //a>=b c>=b
                    if(a>=c){
                        System.out.println("三个数从大到小排列:"+a+"   "+c+"    "+b);
                    }else{
                        //a>=b c>=a
                        System.out.println("三个数从大到小排列:"+c+"   "+a+"    "+b);
                    }
                }
            }else{
                //b>=a
                if(a>=c){
                    //b>=a a>=c
                    System.out.println("三个数从大到小排列:"+b+"   "+a+"    "+c);
                }else{
                    //b>=a c>=a
                    if(b>=c){
                        //b>=c c>=a
                        System.out.println("三个数从大到小排列:"+b+"   "+c+"    "+a);
                    }else{
                        //c>=b c>=a b>=a
                        System.out.println("三个数从大到小排列:"+c+"   "+b+"    "+a);
    
                    }
                }
            }
    
            //方法二改版:最外层先获取最大值,第二层再获取第二大值,更好理解,穷举法
            if(a>=b&&a>=c){
                if(b>=c){
                    System.out.println("三个数从大到小排列:"+a+"   "+b+"    "+c);
                }else{
                    System.out.println("三个数从大到小排列:"+a+"   "+c+"    "+b);
                }
            }else if(b>=a&&b>=c){
                if(a>=c){
                    System.out.println("三个数从大到小排列:"+b+"   "+a+"    "+c);
                }else{
                    System.out.println("三个数从大到小排列:"+b+"   "+c+"    "+a);
                }
            }else{
                if(a>=b){
                    System.out.println("三个数从大到小排列:"+c+"   "+a+"    "+b);
                }else{
                    System.out.println("三个数从大到小排列:"+c+"   "+b+"    "+a);
                }
            }
    
        }
    }
    

    4.模拟ATM取款机的三次密码校验,当天达到3次输入密码错误,则提示“账号被冻结”,其他情况则提示还有多少次输入机会
    注意:如果3次均输错,提示:账号已被冻结
    如果1次或2次输错后退出,提示:欢迎下次再来
    如果输对了密码,提示:随便取款

    import java.util.*;
    
    public class Test4ATM{
        public static void main(String[] args){
            //4.模拟ATM取款机的三次密码校验,当天达到3次输入密码错误,
            //则提示“账号被冻结”,其他情况则提示还有多少次输入机会
            Scanner input=new Scanner(System.in);
            int count=3;//剩余的机会
            String str;
            do{
                System.out.println("请输入密码:");
                int password=input.nextInt();
                if(password==1234){
                    System.out.println("密码正确,请随便取款!");
                    break;
                }else{
                    count--;
                    if(count<1){
                        System.out.println("账号已被冻结,请携带身份证去银行办理");
                        break;
                    }else{
                        System.out.println("密码错误,还剩余"+count+"次机会。如果继续请输入y,退出请按其他任意键:");
                        str=input.next();
                        if(!str.equals("y")){
                            System.out.println("欢迎下次再来!");
                            break;
                        }
                    }   
                }
            }while(str.equals("y"));
        }
    }
    

    5.做一个剪刀石头布的对战小程序

    import java.util.*;
    
    public class Test5Game{
        public static void main(String[] args){
            //5.做一个剪刀石头布的对战小程序
            Scanner input=new Scanner(System.in);
            System.out.println("经典游戏:剪刀石头布");
            System.out.println("游戏规则:1代表剪刀,2代表石头,3代表布");
            int computer=(int)(Math.random()*3)+1;
            //问题核心:剪刀与布的比较
            //方法一:穷举法
            System.out.println("请出拳:");
            int me=input.nextInt();
            switch(me){
                case 1:
                    if(computer==1){
                        System.out.println("你们战平了,电脑出的剪刀!");
                    }else if(computer==2){
                        System.out.println("你输了,电脑出的石头!");
                    }else{
                        System.out.println("你赢了,电脑出的布!");
                    }
                    break;
                case 2:
                    if(computer==1){
                        System.out.println("你赢了,电脑出的剪刀!");
                    }else if(computer==2){
                        System.out.println("你们战平了,电脑出的石头!");
                    }else{
                        System.out.println("你输了,电脑出的布!");
                    }
                    break;
                case 3:
                    if(computer==1){
                        System.out.println("你输了,电脑出的剪刀!");
                    }else if(computer==2){
                        System.out.println("你赢了,电脑出的石头!");
                    }else{
                        System.out.println("你们战平了,电脑出的布!");
                    }
                    break;
            }
    
            //方法二
            if(computer==1&&me==3||computer==3&&me==1){
                if(computer==1&&me==3){
                    System.out.println("你输了,电脑出的"+computer+"!");
                }else{
                    System.out.println("你赢了,电脑出的"+computer+"!");
                }
            }else if(computer==me){
                System.out.println("你战平了,你们出的一样!");
            }else{
                if(computer<me){
                    System.out.println("你赢了,电脑出的"+computer+"!");
                }else{
                    System.out.println("你输了,电脑出的"+computer+"!");
                }
            }
        }
    }

    6.素数也叫质数.是除了1和其本身,不能被其他正整数整除的正整数.1不是素数.
    a)例如:2,3,5,7,11,13,17,19,23…..
    a)写一个方法判断该数是否为素数(设计成一个方法 返回类型boolean)
    b)输出某个范围内的所有素数,比如100-200之间。

    public class Test2SuShu{
        public static void main(String[] args){
            /*
            if(false){
                System.out.println("搞不定");
            }
            */
            /*
            for(int i=1;i<=20;i++){
                //如果是素数,就把他打印出来
                //if(isSuShu(i) == true){
                if(isSuShu(i)){
                    System.out.print(i+" ");
                }
            }
            */
            showSuShu(20,1);
        }
    
        public static void showSuShu(int start,int end){
            //start>end 交换
            for(int i=start;i<=end;i++){
                //如果是素数,就把他打印出来
                //if(isSuShu(i) == true){
                if(isSuShu(i)){
                    System.out.print(i+" ");
                }
            }
        }
    
        public static boolean isSuShu(int n){
            //素数也叫质数.是除了1和其本身,
            //不能被其他正整数整除的正整数.
            //1不是质数也不是合数
            if(n == 1){
                return false;
            }
            //6 2-5
            //在2到当前数-1的范围内
            for(int i=2;i<=n-1;i++){
                //只要有一个数能被整除
                if(n%i == 0){
                    //说明不是素数
                    return false;
                }
            }
            //遍历结束之后
            //还是没有其他的数可以被整除
            //说明是素数
            return true;
        }
    }

    7.数组的查找(两种:普通法,二分法);.数组排序(两种:冒泡排序,选择排序)

    import java.util.Arrays;
    public class Test6Search{
        public static void main(String[] args){
            //7.数组的查找(两种:普通法,二分法)
            int[] arr={2,6,1,5,9,23};
            int num=6;
            //普通法查找
            for(int i=0;i<arr.length;i++){
                if(num==arr[i]){
                    System.out.println("要查询的数"+num+"是数组中的第"+(i+1)+"个");
                }
            }
    
            //二分法查找:必须是有序数组
    
    
            //8.数组排序(两种:冒泡排序,选择排序)
            //冒泡排序
            /*
            for(int j=0;j<arr.length-1;j++){
                for(int i=0;i<arr.length-1-j;i++){
                    if(arr[i]>arr[i+1]){
                        arr[i]=arr[i+1]+arr[i];
                        arr[i+1]=arr[i]-arr[i+1];
                        arr[i]=arr[i]-arr[i+1];
                    }
                }
            }
            */
    
    
            //二分法查找
            int max=arr.length-1;
            int min=0;
            int mid=(max+min)/2;
    
            for(int i=1;i<arr.length;i++){
                if(arr[mid]==num){
                    System.out.println("要查询的数"+num+"是数组中的第"+(mid+1)+"个");
                    break;
                }else if(arr[mid]>num){
                    max=mid-1;  
                }else{
                    min=mid+1;
                }
                mid=(max+min)/2;
            }
    
            //选择排序
            /*
            for(int j=0;j<arr.length-1;j++){
                int index=j;
                for(int i=j+1;i<arr.length;i++){
                    if(arr[index]>arr[i]){
                        index=i;
                    }
    
                }
    
                int temp=arr[j];
                arr[j]=arr[index];
                arr[index]=temp;
            }
            */
    
            System.out.println(Arrays.toString(arr));
        }
    }
  • 相关阅读:
    HDU 5912 Fraction (模拟)
    CodeForces 722C Destroying Array (并查集)
    CodeForces 722B Verse Pattern (水题)
    CodeForces 722A Broken Clock (水题)
    CodeForces 723D Lakes in Berland (dfs搜索)
    CodeForces 723C Polycarp at the Radio (题意题+暴力)
    CodeForces 723B Text Document Analysis (水题模拟)
    CodeForces 723A The New Year: Meeting Friends (水题)
    hdu 1258
    hdu 2266 dfs+1258
  • 原文地址:https://www.cnblogs.com/TCB-Java/p/6770152.html
Copyright © 2011-2022 走看看