JAVA 클래식 알고리즘 면접 40 문제 및 답
17586 단어 자바 백 엔 드 기술
지금 은 3 월 이자 매년 기업 회사 채용 의 절정 기 이 며 많은 친구 들 이 일자 리 를 찾 으 러 나 오고 있다.현재 의 채용 은 때때로 당신 에 게 면접 문제 나 지능 테스트 문 제 를 내 줄 수도 있 고, 직접 컴퓨터 에 접속 하여 프로그램 을 쓰 게 할 수도 있다.알고리즘 의 계산 이 적지 않 아서 이 원인 을 바탕 으로 나 는 스스로 알고리즘 상의 문제 유형 을 수집 했다.모두 에 게 도움 이 되 기 를 바 랍 니 다.
【 프로그램 1 】 제목: 고전적 인 질문: 한 쌍 의 토끼 가 태 어 난 지 3 개 월 째 부터 매달 한 쌍 의 토끼 를 낳는다. 토끼 가 자라 서 4 개 월 째 가 되면 매달 한 쌍 의 토끼 를 낳는다. 만약 토끼 가 죽지 않 는 다 면 매달 토끼 의 총 수 는 얼마 냐 고 묻는다.
1. 프로그램 분석: 토끼 의 법칙 은 수열 1, 1, 2, 3, 5, 8, 13, 21...
public class exp2{
public static void main(String args[]){
int i=0;
for(i=1;i<=20;i++)
System.out.println(f(i));
}
public static int f(int x)
{
if(x==1 || x==2)
return 1;
else
return f(x-1)+f(x-2);
}
}
public class exp2{
public static void main(String args[]){
int i=0;
math mymath = new math();
for(i=1;i<=20;i++)
System.out.println(mymath.f(i));
}
}
class math
{
public int f(int x)
{
if(x==1 || x==2)
return 1;
else
return f(x-1)+f(x-2);
}
}
【 프로그램 2 】 제목: 101 - 200 사이 에 몇 개의 소수 가 있 는 지 판단 하고 모든 소 수 를 출력 합 니 다.
1. 프로그램 분석: 소 수 를 판단 하 는 방법: 하나의 숫자 로 각각 2 에서 sqrt (이 수) 를 제거 하고 제거 할 수 있다 면,
이 수 는 소수 가 아니 라 소수 임 을 나타 낸다.
public class exp2{
public static void main(String args[]){
int i=0;
math mymath = new math();
for(i=2;i<=200;i++)
if(mymath.iszhishu(i)==true)
System.out.println(i);
}
}
class math
{
public int f(int x)
{
if(x==1 || x==2)
return 1;
else
return f(x-1)+f(x-2);
}
public boolean iszhishu(int x)
{
for(int i=2;i<=x/2;i++)
if (x % 2==0 )
return false;
return true;
}
}
[프로그램 3] 제목: 모든 '수선화 수' 를 출력 합 니 다. 이른바 '수선화 수' 는 세 자릿수 를 말 합 니 다. 여러분 의 숫자 큐 브 와 이 숫자 자 체 를 말 합 니 다. 예 를 들 어 153 은 '수선화 수' 입 니 다. 153 = 1 의 세 번 째 + 5 의 세 번 째 + 3 의 세 번 째 방법 이기 때 문 입 니 다.
1. 프로그램 분석: for 순환 을 이용 하여 100 - 999 개의 수 를 제어 하고 각 수 는 개 비트, 10 비트, 백 비트 를 분해 합 니 다.
public class exp2{
public static void main(String args[]){
int i=0;
math mymath = new math();
for(i=100;i<=999;i++)
if(mymath.shuixianhua(i)==true)
System.out.println(i);
}
}
class math
{
public int f(int x)
{
if(x==1 || x==2)
return 1;
else
return f(x-1)+f(x-2);
}
public boolean iszhishu(int x)
{
for(int i=2;i<=x/2;i++)
if (x % 2==0 )
return false;
return true;
}
public boolean shuixianhua(int x)
{
int i=0,j=0,k=0;
i=x / 100;
j=(x % 100) /10;
k=x % 10;
if(x==i*i*i+j*j*j+k*k*k)
return true;
else
return false;
}
}
【 프로그램 4 】 제목: 정수 하 나 를 질량 인 수 를 분해 합 니 다. 예 를 들 어 90 을 입력 하고 90 = 2 * 3 * 3 * 5 를 출력 합 니 다.
프로그램 분석: n 에 대해 분해 질량 인 수 를 진행 하려 면 먼저 가장 작은 질량 k 를 찾 은 다음 에 다음 절차 에 따라 완성 해 야 한다.
(1) 만약 에 이 질 수가 n 과 같다 면 질 인 수 를 분해 하 는 과정 이 이미 끝 났 음 을 설명 하고 인쇄 하면 된다.
(2) n < > k 이지 만 n 이 k 에 의 해 정 제 될 수 있다 면 k 의 값 을 인쇄 하고 n 을 k 로 나 누 는 상 으로 새로운 정수 로 서 첫 번 째 단 계 를 반복 해 야 합 니 다.
(3) n 이 k 에 의 해 제거 되 지 않 으 면 k + 1 을 k 의 값 으로 하고 첫 번 째 단 계 를 반복 합 니 다.
public class exp2{
public exp2(){}
public void fengjie(int n){
for(int i=2;i<=n/2;i++){
if(n%i==0){
System.out.print(i+"*");
fengjie(n/i);
}
}
System.out.print(n);
System.exit(0);/// ,
}
public static void main(String[] args){
String str="";
exp2 c=new exp2();
str=javax.swing.JOptionPane.showInputDialog(" N ( exit ):");
int N;
N=0;
try{
N=Integer.parseInt(str);
}catch(NumberFormatException e){
e.printStackTrace();
}
System.out.print(N+" :"+N+"=");
c.fengjie(N);
}
}
【 프로그램 5 】 제목: 학습 성적 > = 90 점 짜 리 학생 은 A 로, 60 - 89 점 짜 리 는 B 로, 60 점 이하 의 학생 은 C 로 표시 합 니 다.
1. 프로그램 분석: (a > b)? a: b 이것 은 조건 연산 자의 기본 예 입 니 다.
import javax.swing.*;
public class ex5 {
public static void main(String[] args){
String str="";
str=JOptionPane.showInputDialog(" N ( exit ):");
int N;
N=0;
try{
N=Integer.parseInt(str);
}
catch(NumberFormatException e){
e.printStackTrace();
}
str=(N>90?"A":(N>60?"B":"C"));
System.out.println(str);
}
}
[프로그램 6] 제목: 두 개의 정수 m 와 n 을 입력 하여 최대 공약수 와 최소 공배수 를 구하 십시오.
1. 프로그램 분석: 압연 법 을 이용한다.
:
public class CommonDivisor{
public static void main(String args[])
{
commonDivisor(24,32);
}
static int commonDivisor(int M, int N)
{
if(N<0||M<0)
{
System.out.println("ERROR!");
return -1;
}
if(N==0)
{
System.out.println("the biggest common divisor is :"+M);
return M;
}
return commonDivisor(N,M%N);
}
}
:
import java.util.Scanner;
public class CandC
{
//
public static int gcd(int m, int n)
{
while (true)
{
if ((m = m % n) == 0)
return n;
if ((n = n % m) == 0)
return m;
}
}
public static void main(String args[]) throws Exception
{
//
//Scanner chin = new Scanner(System.in);
//int a = chin.nextInt(), b = chin.nextInt();
int a=23; int b=32;
int c = gcd(a, b);
System.out.println(" :" + a * b / c + "
:" + c);
}
}
[프로그램 7] 제목: 한 줄 의 문 자 를 입력 하여 각각 영문 자모, 빈 칸, 숫자 와 다른 문자 의 개 수 를 집계 합 니 다.
1. 프로그램 분석: while 문 구 를 이용 하여 입력 한 문 자 는 '' 가 아 닙 니 다.
import java.util.Scanner;
public class ex7 {
public static void main(String args[])
{
System.out.println(" :");
Scanner scan=new Scanner(System.in);
String str=scan.next();
String E1="[\u4e00-\u9fa5]";
String E2="[a-zA-Z]";
int countH=0;
int countE=0;
char[] arrChar=str.toCharArray();
String[] arrStr=new String[arrChar.length];
for (int i=0;ifor (String i: arrStr )
{
if (i.matches(E1))
{
countH++;
}
if (i.matches(E2))
{
countE++;
}
}
System.out.println(" "+countH);
System.out.println(" "+countE);
}
}
[프로그램 8] 제목: s = a + aa + aa + aa + aa... a 의 값 을 구 합 니 다. 그 중에서 a 는 하나의 숫자 입 니 다. 예 를 들 어 2 + 22 + 2222 + 2222 + 22222 (이때 모두 5 개의 수 를 더 합 니 다), 몇 개의 수 를 더 하면 키보드 제어 가 있 습 니 다.
1. 프로그램 분석: 관건 은 모든 항목 의 값 을 계산 하 는 것 이다.
import java.io.*;
public class Sumloop {
public static void main(String[] args) throws IOException
{
int s=0;
String output="";
BufferedReader stadin = new BufferedReader(new InputStreamReader(System.in));
System.out.println(" a ");
String input =stadin.readLine();
for(int i =1;i<=Integer.parseInt(input);i++)
{
output+=input;
int a=Integer.parseInt(output);
s+=a;
}
System.out.println(s);
}
}
:
import java.io.*;
public class Sumloop {
public static void main(String[] args) throws IOException
{
int s=0;
int n;
int t=0;
BufferedReader stadin = new BufferedReader(new InputStreamReader(System.in));
String input = stadin.readLine();
n=Integer.parseInt(input);
for(int i=1;i<=n;i++){
t=t*10+n;
s=s+t;
System.out.println(t);
}
System.out.println(s);
}
}
[프로그램 9] 제목: 하나의 숫자 가 인자 의 합 과 같 으 면 이 수 를 '정수' 라 고 합 니 다. 예 를 들 어 6 = 1 + 2 + 3 프로 그래 밍 입 니 다. 1000 이내 의 모든 완 수 를 찾아내다.
public class Wanshu {
public static void main(String[] args)
{
int s;
for(int i=1;i<=1000;i++)
{
s=0;
for(int j=1;jif(i % j==0)
s=s+j;
if(s==i)
System.out.print(i+" ");
}
System.out.println();
}
}
[프로그램 10] 제목: 한 골 이 100 미터 높이 에서 자 유 롭 게 떨 어 지고 매번 착지 한 후에 원래 높이 의 절반 으로 되 돌아 가 고 다시 떨 어 지면 다시 떨 어 지면 10 번 째 착지 할 때 모두 몇 미 터 를 거 쳤 습 니까? 10 번 째 반등 은 얼마나 높 습 니까?
public class Ex10 {
public static void main(String[] args)
{
double s=0;
double t=100;
for(int i=1;i<=10;i++)
{
s+=t;
t=t/2;
}
System.out.println(s);
System.out.println(t);
}
}