대학생 필수 연습 문제 - 자바 언어 고전 50 예
76054 단어 데이터 구조 와 알고리즘Java문장 총람자바알고리즘
글 목록
머리말
대학 시절 에 자바 언어 는 일반적으로 컴퓨터 학과 의 과정 이 되 었 고 많은 학생 들 이 자바 를 선택 하여 프로 그래 밍 을 배 우 는 주요 언어 로 삼 았 다.기초 지식 을 습득 한 후에 대량의 프로 그래 밍 연습 문제, 핸드폰 코드 를 통 해 기초 지식 을 공 고 히 하고 프로 그래 밍 사 고 를 단련 하 는 중요 한 수단 중 하나 이다.자바 언어 연습 사례 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 문자열 바 꾸 기
제목: 문자열 의 한 하위 문자열 을 다른 문자열 로 바 꿉 니 다.예 를 들 어
JavaLib
의 Java
문자열 을 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 문자열 반전
제목: 문자열 을 반전 합 니 다. 예 를 들 어
abcde
을 edcba
로 반전 합 니 다.분석: 직접 호출
StringBuffer
류 reverse
방법.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();
}
}
}
데모 코드 의 출력 결 과 는 다음 과 같 습 니 다.
10 :
1
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 를 베 는 것 은 꿈 이 아 닙 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JAVA] 배열 회전 출력요소 가 출력 을 시작 하 는 위치 에 주의 하 십시오. 모두 몇 라운드 의 수출 이 있 습 니까? n/2 + 1 매 라 운 드 는 상, 우, 하, 좌 로 나 뉜 다. 각 방향의 시작 위치 와 좌표 의 관 계 를 구...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.