JAVA 클래식 알고리즘 면접 40 문제 및 답

By Lee - Last updated: 일요일, 3 월 9, 2014
지금 은 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);
	 
 }
}

좋은 웹페이지 즐겨찾기