대학생 필수 연습 문제 - 자바 언어 고전 50 예

저 는 진피 입 니 다. 인터넷 Coding 의 ITEr 입 니 다. 위 챗 에서 '진피 의 자바 Lib' 를 검색 하여 최신 글 을 읽 고 답장 을 하면 제 가 정 성 스 럽 게 정리 한 기술 자료, 전자 서적, 일 선 공장 면접 자료 와 우수한 이력서 양식 을 얻 을 수 있 습 니 다.
글 목록
  • 머리말
  • 1 한 노 타
  • 2 피 보 나치 수열
  • 3 구구 곱셈 표
  • 4 문자열 교체
  • 5 문자열 반전
  • 6 거꾸로 서 있 는 삼각형 인쇄
  • 7 분석 URL
  • 8 수선화 수
  • 9 양 휘 삼각형
  • 10 분해 질 인수
  • 11 작은 공 자유 낙하
  • 12 윤년 판단
  • 13 단계 승

  • 머리말
    대학 시절 에 자바 언어 는 일반적으로 컴퓨터 학과 의 과정 이 되 었 고 많은 학생 들 이 자바 를 선택 하여 프로 그래 밍 을 배 우 는 주요 언어 로 삼 았 다.기초 지식 을 습득 한 후에 대량의 프로 그래 밍 연습 문제, 핸드폰 코드 를 통 해 기초 지식 을 공 고 히 하고 프로 그래 밍 사 고 를 단련 하 는 중요 한 수단 중 하나 이다.자바 언어 연습 사례 50 예, 문제 + 문제 풀이 사고 + 해법 을 소개 합 니 다.
    1 한 노 타
    제목: 한 판 에 세 개의 바늘 A, B, C 가 있다 고 가정 합 니 다.A 바늘 에는 크기 가 같 지 않 은 원반 64 개가 달 려 있 고, 큰 것 은 아래, 작은 것 은 위 순서 로 배열 되 어 있 으 며, 이 원반 64 개 를 A 바늘 에서 C 바늘 로 옮 겨 야 하 며, 매번 원반 하나만 움 직 일 수 있 으 며, 이동 과정 은 B 바늘 을 빌 릴 수 있다.그러나 언제든지 바늘 에 있 는 원반 은 큰 접시 가 아래 에 있 고 작은 접시 가 위 에 있어 야 한다.키보드 에서 이동 할 원반 개 수 를 입력 하여 이동 하 는 과정 을 보 여 줍 니 다.
    분석: 재 귀 를 이용 하여 원반 의 전체 이동 과정 을 실현 한다.원반 하나만 움 직 일 때 원반 을 A 바늘 에서 C 바늘 로 직접 이동한다.이동 하 는 원반 이 n (n > 1) 이면 몇 단계 로 나 누 어 갑 니 다. (n - 1) 개의 원반 을 A 바늘 에서 B 바늘 로 이동 합 니 다 (C 바늘 을 빌 립 니 다).A 바늘 에 있 는 마지막 원반 을 C 바늘 로 이동 하기;B 바늘 에 있 는 (n - 1) 개의 원반 이 C 바늘 로 이동한다.한 번 할 때마다 이동 하 는 원반 이 하나 가 적 고 한 번 씩 줄 어 들 며 마지막 으로 n 이 1 일 때 전체 이동 과정 을 완성 합 니 다.
    package com.nobody;
    
    /**
     * @Description
     * @Author Mr.nobody
     * @Date 2021/5/31
     * @Version 1.0
     */
    public class Demo {
         
        public static void main(String[] args) {
         
            //  3    A   C
            hanoi(3, 'A', 'B', 'C');
        }
    
        /**
         *        
         * 
         * @param n     
         * @param from     
         * @param inter     
         * @param to     
         */
        public static void hanoi(int n, char from, char inter, char to) {
         
            //             from   to
            if (n == 1) {
         
                System.out.println("  1  " + from + "     " + to);
            } else {
         
                //      n-1                 
                hanoi(n - 1, from, to, inter);
                //                  
                System.out.println("  " + n + "  " + from + "     " + to);
                //     n-1                
                hanoi(n - 1, inter, from, to);
            }
        }
    }
    

    데모 코드 의 출력 결 과 는 다음 과 같 습 니 다.
      1  A     C
      2  A     B
      1  C     B
      3  A     C
      1  B     A
      2  B     C
      1  A     C
    

    2 피 보 나치 수열
    제목: 피 보 나치 수열 의 1 번 은 0, 2 번 은 1, 3 번 부터 각 항목 의 값 은 앞의 두 항목 의 합 이다.예 를 들 어 3 항 은 1 항 과 2 항의 합, 즉 0 + 1 = 1 이 고 4 항 은 2 항 과 3 항의 합, 즉 1 + 1 = 2 이다.그것 은 이렇게 수열 0, 1, 1, 2, 3, 5, 8, 13, 21...
    분석: 앞의 2 항 은 비교적 특수 하기 때문에 단독으로 처리 하고 3 항 부터 앞의 두 항의 합 을 통 해 다음 항의 값 을 구하 면 된다.두 가지 해법 이 실 현 됩 니 다. 한 가지 해법 은 두 개의 변 수 를 통 해 앞의 두 가지 값 을 계속 저장 한 다음 에 그들의 합 을 구하 면 됩 니 다.다른 해법 은 재 귀 알고리즘 을 통 해 현재 항목 부터 앞의 두 항목 의 값 을 계속 재 귀 하여 1 항 과 2 항의 값 까지 계산 하면 다시 미 룰 수 있다.
    package com.nobody;
    
    /**
     * @Description     
     * @Author Mr.nobody
     * @Date 2021/5/31
     * @Version 1.0
     */
    public class Demo {
         
        public static void main(String[] args) {
         
            //    20  
            int num = 20;
            for (int i = 1; i <= num; i++) {
         
                System.out.println("       " + i + "  " + fibonacci(i));
            }
        }
    
        public static long fibonacci(long number) {
         
            //  1   2     ,   0 1
            if (number == 1 || number == 2) {
         
                return number - 1;
            } else {
         
                //    1   2 ,       
                return fibonacci(number - 2) + fibonacci(number - 1);
            }
        }
    }
    
    package com.nobody;
    
    /**
     * @Description      
     * @Author Mr.nobody
     * @Date 2021/5/31
     * @Version 1.0
     */
    public class Demo {
         
        public static void main(String[] args) {
         
            //    20  
            int num = 20;
            //        
            int x = 0, y = 1;
            //      
            int curData;
            for (int i = 1; i <= num; i++) {
         
                //  1   2     ,   0 1
                if (i == 1 || i == 2) {
         
                    System.out.println("       " + i + "  " + (i - 1));
                } else {
          //    1   2 ,       
                    curData = x + y;
                    System.out.println("       " + i + "  " + curData);
                    x = y;
                    y = curData;
                }
            }
        }
    }
    

    데모 코드 의 출력 결 과 는 다음 과 같 습 니 다.
           1  0
           2  1
           3  1
           4  2
           5  3
           6  5
           7  8
           8  13
           9  21
           10  34
           11  55
           12  89
           13  144
           14  233
           15  377
           16  610
           17  987
           18  1597
           19  2584
           20  4181
    

    3 구구 곱셈 표
    제목: 출력 구구 곱셈 표.
    분석: 2 층 for 순환 으로 출력 구구 곱셈 표를 옮 겨 다 닌 다.
    package com.nobody;
    
    /**
     * @Description      
     * @Author Mr.nobody
     * @Date 2021/5/31
     * @Version 1.0
     */
    public class Demo {
         
        public static void main(String[] args) {
         
            for (int i = 1; i <= 9; i++) {
         
                for (int j = 1; j <= i; j++) {
         
                    System.out.print(j + "×" + i + "=" + i * j + "\t");
                }
                System.out.println();
            }
        }
    }
    

    데모 코드 의 출력 결 과 는 다음 과 같 습 니 다.
    1×1=1	
    1×2=2	2×2=4	
    1×3=3	2×3=6	3×3=9	
    1×4=4	2×4=8	3×4=12	4×4=16	
    1×5=5	2×5=10	3×5=15	4×5=20	5×5=25	
    1×6=6	2×6=12	3×6=18	4×6=24	5×6=30	6×6=36	
    1×7=7	2×7=14	3×7=21	4×7=28	5×7=35	6×7=42	7×7=49	
    1×8=8	2×8=16	3×8=24	4×8=32	5×8=40	6×8=48	7×8=56	8×8=64	
    1×9=9	2×9=18	3×9=27	4×9=36	5×9=45	6×9=54	7×9=63	8×9=72	9×9=81
    

    4 문자열 바 꾸 기
    제목: 문자열 의 한 하위 문자열 을 다른 문자열 로 바 꿉 니 다.예 를 들 어 JavaLibJava 문자열 을 C 로 교체 하면 최종 적 으로 CLib 로 바뀐다.
    분석: 자바 라 이브 러 리 에는 실 용적 인 클래스 가 많 습 니 다. 일반적인 방법 을 많이 정 의 했 습 니 다. String 류 의 replace 방법 을 사용 할 수 있 습 니 다.
    package com.nobody;
    
    /**
     * @Description
     * @Author Mr.nobody
     * @Date 2021/5/31
     * @Version 1.0
     */
    public class Demo {
         
        public static void main(String[] args) {
         
            String str = "    ,     【   JavaLib】";
            System.out.println("    `  ` `  `      :" + str.replace("  ", "  "));
            System.out.println("    `  ` `  `      :" + str.replaceAll("  ", "  "));
            System.out.println("     `  ` `  `      :" + str.replaceFirst("  ", "  "));
        }
    }
    

    데모 코드 의 출력 결 과 는 다음 과 같 습 니 다.
        `  ` `  `      :    ,     【   JavaLib】
        `  ` `  `      :    ,     【   JavaLib】
         `  ` `  `      :    ,     【   JavaLib】
    

    5 문자열 반전
    제목: 문자열 을 반전 합 니 다. 예 를 들 어 abcdeedcba 로 반전 합 니 다.
    분석: 직접 호출 StringBufferreverse 방법.
    package com.nobody;
    
    /**
     * @Description
     * @Author Mr.nobody
     * @Date 2021/5/31
     * @Version 1.0
     */
    public class Demo {
         
        public static void main(String[] args) {
         
            String str = "abcde";
            String reverse = new StringBuffer(str).reverse().toString();
            System.out.println(str + "   :" + reverse);
        }
    }
    

    데모 코드 의 출력 결 과 는 다음 과 같 습 니 다.
    abcde   :edcba
    

    6 거꾸로 세 워 진 삼각형 인쇄
    제목: 물 구나 무 삼각형 을 인쇄 하고 * 번 으로 인쇄 합 니 다.
    분석: 물 구나 무 서 있 는 삼각형, 우 리 는 한 줄 을 아래로 인쇄 하 는 방법 을 사용 합 니 다. 한 줄 을 인쇄 할 때마다 한 줄 앞 에 몇 개의 빈 칸 을 인쇄 해 야 하 는 지 계산 해 야 합 니 다.
    package com.nobody;
    
    /**
     * @Description         
     * @Author Mr.nobody
     * @Date 2021/5/31
     * @Version 1.0
     */
    public class Demo {
         
        public static void main(String[] args) {
         
            //   6        
            for (int i = 1; i <= 6; i++) {
         
                //          ,              
                for (int j = 0; j <= i; j++) {
         
                    System.out.print(" ");
                }
                //   *
                for (int k = 1; k <= 11 - 2 * (i - 1); k++) {
         
                    System.out.print("*");
                }
                System.out.println();
            }
        }
    }
    

    데모 코드 의 출력 결 과 는 다음 과 같 습 니 다.
      ***********
       *********
        *******
         *****
          ***
           *
    

    7 해석 URL
    제목: url 주 소 는 프로 토 콜, IP, 포트, 파일 이름 등 몇 부분 으로 구성 되 어 있 습 니 다.URL 에서 추출 해 주세요.
    분석: URL 류 를 통 해 URL 에 해당 하 는 정 보 를 추출 하 는 데 사용 되 는 여러 가지 방법 을 정의 했다.
    package com.nobody;
    
    import java.net.URL;
    
    /**
     * @Description    URL
     * @Date 2021/5/31
     * @Version 1.0
     */
    public class Demo {
         
        public static void main(String[] args) throws Exception {
         
            URL url = new URL("http://www.nobody.com/html/index.html");
            System.out.println("URL:" + url.toString());
            System.out.println("  :" + url.getProtocol());
            System.out.println("  :" + url.getHost());
            System.out.println("   :" + url.getPort());
            System.out.println("   :" + url.getFile());
            System.out.println("  :" + url.getPath());
            System.out.println("     :" + url.getDefaultPort());
        }
    }
    

    데모 코드 의 출력 결 과 는 다음 과 같 습 니 다.
    URL:http://www.nobody.com/html/index.html
      :http
      :www.nobody.com
       :-1
       :/html/index.html
      :/html/index.html
         :80
    

    수선화
    제목: 수선화 수 는 세 자릿수 를 말 하 는데 그 숫자 큐 브 와 그 숫자 자 체 를 말한다.예 를 들 어 153 은 하나의 수선화 수, 153 = 1 ^ 3 + 5 ^ 3 + 3 ^ 3.
    분석: 100 - 999 사이 의 수 를 옮 겨 다 니 며 각 숫자의 입방 이 그 자체 와 같 는 지 계산한다.
    package com.nobody;
    
    /**
     * @Description     
     * @Date 2021/5/31
     * @Version 1.0
     */
    public class Demo {
         
        public static void main(String[] args) {
         
            int x, y, z;
            for (int i = 100; i <= 999; i++) {
         
                x = i % 10;
                y = i / 10 % 10;
                z = i / 100 % 10;
    
                if (i == (x * x * x + y * y * y + z * z * z)) {
         
                    System.out.println(i);
                }
            }
        }
    }
    

    데모 코드 의 출력 결 과 는 다음 과 같 습 니 다.
    153
    370
    371
    407
    

    9 양 휘 삼각형
    제목: 양 휘 삼각형 의 두 허리 수 는 모두 1 이 고 다른 위치의 수 는 모두 위 에 있 는 두 수의 합 이다.
    package com.nobody;
    
    /**
     * @Description     
     * @Date 2021/5/31
     * @Version 1.0
     */
    public class Demo {
         
        public static void main(String[] args) {
         
            //       
            int n = 10;
    
            int i, j, k;
    
            int[][] a = new int[n + 1][n + 1];
    
            System.out.println(n + "       :");
    
            for (i = 1; i <= n; i++) {
         
                //        1
                a[i][1] = a[i][i] = 1;
            }
    
            for (i = 3; i <= n; i++) {
         
                for (j = 2; j <= i - 1; j++) {
         
                    //                
                    a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
                }
            }
    
            for (i = 1; i <= n; i++) {
         
                for (k = 1; k <= n - i; k++) {
         
                    //      ,             
                    System.out.print("   ");
                }
                for (j = 1; j <= i; j++) {
         
                    System.out.printf("%6d", a[i][j]);
                }
                //           
                System.out.println();
            }
        }
    }
    

    데모 코드 의 출력 결 과 는 다음 과 같 습 니 다.
    101
                                 1     1
                              1     2     1
                           1     3     3     1
                        1     4     6     4     1
                     1     5    10    10     5     1
                  1     6    15    20    15     6     1
               1     7    21    35    35    21     7     1
            1     8    28    56    70    56    28     8     1
         1     9    36    84   126   126    84    36     9     1
    

    10 분해 질 인수
    제목: 정수 분해 질량 인수.예 를 들 어 80 을 입력 하고 80 = 2 * 2 * 2 * 5 를 출력 합 니 다.
    분석: 가장 작은 질량 인 수 는 2 이기 때문에 2 부터 점차적으로 증가 하고 전체 수량의 절반 을 초과 하지 않 는 다.질 인 수 를 찾 지 못 하면 이 질 인 수 를 제거 하고 계속 옮 겨 다 닌 다.
    package com.nobody;
    
    import java.util.Scanner;
    
    /**
     * @Description      
     * @Date 2021/5/31
     * @Version 1.0
     */
    public class Demo {
         
        public static void main(String[] args) {
         
            System.out.print("            :");
            Scanner scanner = new Scanner(System.in);
            int num = scanner.nextInt();
    
            //      
            System.out.print(num + "     :");
            int tmp = num / 2;
            for (int i = 2; i <= tmp; i++) {
         
                if (num % i == 0) {
         
                    num = num / i;
                    System.out.print(i + " ");
                    i = 1;
                }
            }
        }
    }
    

    데모 코드 의 출력 결 과 는 다음 과 같 습 니 다.
                :80
    80     :2 2 2 2 5 
    

    11 작은 공 자유 낙하
    제목: 한 골 은 100 미터 높이 에서 자 유 롭 게 떨 어 지고, 매번 착지 한 후 원래 높이 의 절반 으로 되 돌아 가 떨 어 지 며, 10 번 째 착지 할 때 모두 몇 미 터 를 거 쳐 야 합 니까?10 번 째 반등 은 얼마나 높 습 니까?
    분석: 첫 번 째 는 100 미터 높이 에서 떨 어 졌 는데 이 경 로 는 단독으로 처리 해 야 한다. 즉, 첫 번 째 로 바닥 에 떨 어 졌 을 때 100 미 터 를 거 쳤 는데 이때 높이 는 0 미터 이다.그리고 매번 작은 공 을 튕 기 고 돌아 오 면 매번 지나 가 는 노정 이 튕 기 는 높이 의 2 배 에 이른다.
    package com.nobody;
    
    /**
     * @Description       
     * @Date 2021/5/31
     * @Version 1.0
     */
    public class Demo {
         
        public static void main(String[] args) {
         
            float h = 100, s = 100;
            //        
            h = h / 2;
            for (int i = 2; i <= 10; i++) {
         
                s = s + 2 * h;
                h = h / 2;
            }
            System.out.printf(" 10    ,   %f , 10    %f ", s, h);
        }
    }
    

    데모 코드 의 출력 결 과 는 다음 과 같 습 니 다.
     10    ,   299.609375 , 10    0.097656 
    

    12 윤년 을 판단 한다
    제목: 윤년 은 4 로 나 눌 수 있 고 100 으로 나 눌 수 없 거나 400 으로 나 눌 수 있다 면 이 해 는 윤년 이다.
    분석: 연도 가 4 로 정 제 될 수 있 는 지, 100 으로 정 제 될 수 없 는 지, 아니면 400 으로 정 제 될 수 있 는 지 를 판단 한다. 만약 두 가지 조건 이 하나 성립 된다 면 이 해 는 윤년 이다.
    package com.nobody;
    
    import java.util.Scanner;
    
    /**
     * @Description     
     * @Date 2021/5/31
     * @Version 1.0
     */
    public class Demo {
         
        public static void main(String[] args) {
         
            System.out.print("     :");
            Scanner sc = new Scanner(System.in);
            int year = sc.nextInt();
    
            //          4      100  
            boolean isLeapYear = (year % 4 == 0) && (year % 100 != 0);
            //          400  
            boolean isLeapYear1 = year % 400 == 0;
    
            //             
            if (isLeapYear || isLeapYear1) {
         
                System.out.println(year + "   !");
            } else {
         
                System.out.println(year + "    !");
            }
        }
    }
    

    데모 코드 의 출력 결 과 는 다음 과 같 습 니 다.
         :2021
    2021    !
    
         :2020
    2020

    13 단계 곱 하기
    제목: 하나의 정수 의 단 계 는 이 수의 정수 보다 작고 같은 모든 적 이 며 0 의 단 계 는 1 이다.자연수 n 의 단계 곱 하기 쓰기 n!n!=1×2×3×…×n。
    분석: n 의 단 계 를 계산 하 는 것 은 n - 1 이라는 수의 단 계 를 n 에 곱 하 는 것 과 같 기 때문에 재 귀 를 이용 하여 실현 할 수 있다.
    package com.nobody;
    
    import java.util.Scanner;
    
    /**
     * @Description   
     * @Date 2021/5/31
     * @Version 1.0
     */
    public class Demo {
         
        public static void main(String[] args) {
         
            System.out.print("       :");
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            for (int i = 0; i <= n; i++) {
         
                System.out.printf("%d! = %d
    "
    , i, factorial(i)); } } public static long factorial(long n) { if (n <= 1) { return 1; } else { return n * factorial(n - 1); } } }

    데모 코드 의 출력 결 과 는 다음 과 같 습 니 다.
           :10
    0! = 1
    1! = 1
    2! = 2
    3! = 6
    4! = 24
    5! = 120
    6! = 720
    7! = 5040
    8! = 40320
    9! = 362880
    10! = 3628800
    

    지속 적 인 업데이트, 수집 에 관심 을 가지 고 자바 언어 연습 문 제 를 지속 적 으로 학습 합 니 다...
    여러분 에 게 추천 CSDN 하 는 Java 은 전면적 인 지식 을 포함 하고 관심 이 있 으 면 구 할 수 있 습 니 다. 추천 합 니 다. 특히 재 학생 들 이 이런 지식 을 습득 할 수 있다 면 BAT 공장 Offer 를 베 는 것 은 꿈 이 아 닙 니 다!

    좋은 웹페이지 즐겨찾기