ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA_05_실습_반복문과 조건문2
    1. JAVA/1.2 실습 2022. 3. 14. 15:30

    문제 1 ] 랜덤하게 정수를 컴퓨터가 만들어 내면 그 수를 알아맞추는 게임을 만드세요.

      예 ] 발생숫자 : 54 
           사용자입력숫자 : 45
            ==> "입력한 수가 더 작습니다." 로 메세지 를 출력해서 사용자가 숫자를 알아맞추는 게임...
           (단, 입력횟수가 5번을 초과하는 순간 컴퓨터의 승리로 처리하고 프로그램이 종료되게 하세요.)

    	public static void main(String[] args) {
    		int i = 0;
    		String str = "정수를 입력하시오";
    		int com = (int)(Math.random()*100);
    		Scanner sc = new Scanner(System.in);
    		String result = "";
    		
    		while(true) {
    			System.out.print(str);
    			int input = sc.nextInt();
    			
    			
    			if(input>com) {
    					result = "["+(i+1)+"] 컴퓨터 수보다 큽니다.";	
    				}
    			else if(input<com) {
    					result = "["+(i+1)+"] 컴퓨터 수보다 작습니다.";
    				}
    			else 
    			{
    				result = "["+(i+1)+"]정답!";
    				break;
    			}
    		
    			if(i==5) {
    				
    				break;
    			}
    			i++;
    			System.out.println(result);
    			
    		}
    		
    		System.out.println(result +"[5] 종료 컴퓨터 승리");
    	}
    
    }

     


    문제 2 ]  5자리의 숫자를 입력한 후 각자리의 수의 합을 구하는 프로그램을 작성하세요.

    public class Ex07 {
    
    	public static void main(String[] args) {
    	//입력도구 준비
    	Scanner sc = new Scanner(System.in);
    	//메세지 출력
    	System.out.print("5자리 정수 입력 : ");
    	//입력받고 기억하고
    	int no = sc.nextInt();
    	//반복해서 합 구하고
    	int sum=0;
    	int temp = no;
    	for(int i = 0; i<5;i++) {
    		sum += temp%10;
    
    		//1234
    		temp = temp/10;
    	}
    	
    		System.out.println("입력한 수 "+no+"의 각 자리수의 합은?  "+sum);
    	//결과 출력	
    	
    	}


    문제 3 ]  1바이트로 기억되는 2진수를 랜덤하게 만들어 그숫자가 10진수로 몇인지출력하는 프로그램을 작성하세요.
                문자열 2진수를 10진수 정수로 변환해주는 방법 

                 Integer.valueOf("문자열 2진수", 2);
                 Integer.parseInt("문자열 2진수", 2);
                 이진수 는 0과 1을 랜덤하게 발생시켜서 문자열에 덧붙여서 만든다.

     

    public static void main(String[] args) {
    	//이진수 기억할 변수 생성
    	String bno = "";
    	//반복해서 코드를 0또는 1을 만들어서 위 변수의 왼쪽에 덧붙인다.
    	
    	for(int i = 0; i<8;i++) {
    		int no = (int)(Math.random()*2);
    		bno += no;
    	}
    	//문자열 형태의 2진수를 10진수로 변환
    	int result = Integer.valueOf(bno,2);
    	//출력
    	System.out.println("랜덤하게 만들어진 이진수: "+bno);
    	System.out.println("십진수로 변환한 이진수: "+result);
    	}


    문제 4 ] 숫자형식의 다섯자리 정수형태 문자열을 입력받아서 각자리 수의 합을 구하는 프로그램을 작성하세요.
               문자열로 입력받아서 문자로 변환후 처리하세요.

              0을 숫자로 변환 : '0'-'0'
              1을 숫자로 변환 : '1'-'0'

    public static void main(String[] args) {
    	Scanner sc = new Scanner(System.in);
    	//메세지
    	System.out.println("다섯자리 숫자 입력 : ");
    	//변수에 기억
    	String sno = sc.nextLine();
    	//전체길이
    	int len = sno.length();
    	//합 기억할 변수
    	int sum = 0;
    	
    	for(int i = 0; i<len;i++) {
    		//각 자릿수 꺼내서 문자로 꺼냄..
    		char ch = sno.charAt(i);
    		int num = ch-'0';
    		sum+=num;
    		//문자를 숫자로 변환
    		
    		//합계변수에 누적
    	}
    	
    	System.out.println("입력한 숫자 ["+sno+"]의 각 자리의 합은? "+sum+"입니다.");
    		}


    문제 5] 1 - 2 + 3 - 4 + 5 - 6 .... 했을 경우 어디까지 계산하면 그 결과가 100을 넘기게 되는지 출력하세요.

    public static void main(String[] args) {
    	int no = -1;
    	int sum = 0;
    	int i = 1;
    	for(i = 1;;i++) {
    		no *=-1;
    		sum=sum+i*no;
    		if(sum>100) {
    			break;
    		}
    	}
    	System.out.println("1부터"+(i*no)+" 까지의 합이 "+sum+"으로 처음 100을 넘기게 된다.");
    		
    	}

     


    문제 6] 주사위 2개를 던질 경우 눈의 합이 6이 되는경우를 모두 출력하세요

    	public static void main(String[] args) {
    	int x = 0;
    	int y = 0;
    	for(x = 1; x<=6;x++) {
    		for(y = 1; y<=6;y++) {
    			if(x+y==6) {
    				System.out.println("x : "+x+", y : "+y);
    			}
    		}
    	}
    
    	}


    문제7 ]   2x + 4y = 10 의 방정식의 결과를 구하시오  단, 0<= x, y<=10 

    	public static void main(String[] args) {
    	int result = 0;
    
    	for(int x = 0; x<=10;x++) {
    		for(int y = 0; y<=10;y++) {
    			if(2*x+4*y==10) {
    				System.out.println("x : "+x+" | y : "+y+" 일때 성립한다.");
    			}
    		}
    	}


    문제8 ] 5자리 숫자 하나를 입력받아서 이 숫자가 회문수 인지 아닌지 판별하는 프로그램을 작성하세요
      회문수란?   첫번재 자리수와 마지막 자리수

                     두번째 자리수와 마지막에서 두번째 자리수
                      ... 가 동일한 수를 말한다.

    public static void main(String[] args) {
    	Scanner sc = new Scanner(System.in);
    	System.out.println("임의의 5자리의 수를 입력하시오");
    		
    	String input = sc.nextLine();
    	int length = input.length();
    	String result = "회문수가 아닙니다.";
    	// 0 1 2 3 4 0:4 1:3
    	for(int i = 0; i<length-4;i++) {
    		if(input.charAt(i)==input.charAt(i+(4-i))){
    			result = "회문수 입니다.";
    		}
    	}
    
    	System.out.println(input+" ==> "+result);


    문제 9]   랜덤한 두 수를 입력한 후 두 수의 최대 공약수를 구하는 프로그램을 작성하시오

    	public static void main(String[] args) {
    	Scanner sc = new Scanner(System.in);
    	
    	// 1번 입력메세지
    	System.out.println("첫번째 숫자 : ");
    	// 1번 데이터 기억
    	int no1 = sc.nextInt();
    	// 2번 입력메세지
    	System.out.println("두번째 숫자 : ");
    	// 2번 데이터 기억
    	int no2 = sc.nextInt();
    	
    	
    	// 두 수 중 작은 수 찾기
    	int min = (no1<no2)?no1:no2;
    	
    	// 공약수 찾기
    	// 결과 출력하기
    	int result = 1;//최소공약수, 최대공약수
    	for(int i = min; i>1;i--) {
    		if(no1%i==0 && no2%i==0) {
    			result =  i;
    			
    			//원하는 숫자를 찾았으므로, 더이상 반복작업을 할 이유가 없다.
    			break;
    			//따라서 즉시 반복문을 종료시켜준다.
    		}
    	}
    	
    	System.out.println("입력받은 두 수 : "+no1+" | "+no2+"의\n 최대 공약수는 : "+
    	result+" 입니다.");
    	
    	int max = (no2>no1)?no2:no1;
    	for(int i = 1;i<max;i++) {
    		if(no1%i==0 && no2%i==0) {
    			result = i;
    		}
    	}
    	
    	}


    문제10] 다음 조건을 만족하는 숫자를 찾는 프로그램을 작성하세요.
            1. 4자리 숫자 abcd는 0이 들어있지 않고, 모두 다른 숫자이다.
            2. 첫번째 숫자(a)가 마지막 숫자(d)보다 2 큼
               a : 3 <=  9 >=  
               d : 1 <= 7 >=

            3. 두번째 숫자(b)가 세번째 숫자(c)보다 크다. b>c ==> c+1부터 시작
            4. 4자리 숫자를 역순으로 하고 그 수와 4자리수를 합하면 16456이 된다.
                        a b c d
                     + d c b a
                    ==> 16456   

    public static void main(String[] args) {
    		int a,b,c,d = 0;
    		int result = 0;
    		
    		loop:
    		for(a = 3; a<=9;a++) {
    			d = a-2;
    			for(b = 2; b <10;b++) {
    				if(b==a || b==d) 
    				{
    					continue;
    					
    					// 이 경우는 같은 숫자가 발생하는 경우므로 
    					// 조건에 맞지 않으므로 다음 번호를 추출해서 
    					// 다른 조건을 비교해야 한다.
    				}
    				//이 라인을 실행하는 경우는 
    				//b가 a,d와 같은 경우이다.
    				for(c = 1 ; c<b;c++) {
    					
    					if(c == a || c ==d) 
    					{
    						continue;
    					}
    					//이 행을 실행하는 순간은 필요한 숫자가 모두 만들어 졌다.
    					int no1 = a*1000 + b*100+c*10+d;
    					int no2 = d*1000 + c*100+b*10+a;
    					if(no1+no2==16456) {
    						result = no1;
    						break loop;
    					}
    					
    				}
    			}
    			
    			
    		}
    		System.out.println("찾는 번호는 "+result+"입니다.");
    		
    	}

    사실 나는 이 해답이 이해가 안가서.. 내 방식대로 풀어보았다..(코드가 더러워짐 주의)

    	public static void main(String[] args) {
    		int a,b,c,d = 0;
    		int result = 0;
    		for(int i = 1000; i<9999;i++) {
    			a  = (i/1000)%10;
    			b  = (i/100)%10;
    			c  = (i/10)%10;
    			d  = i%10;
    
    			if(a!=0&&b!=0&&c!=0&&d!=0 && a!=b &&b!=c&&c!=d &&a!=d&& b!=d) {
    				if(a==d+2 && b>c) {
    					int tmp = a*1000+b*100+c*10+d;
    					int tmp1 = d*1000+c*100+b*10+a;
    					if(tmp+tmp1==16456) {
    						result =  a*1000+b*100+c*10+d;
    					}
    				}
    			}
    			
    		}
    		System.out.println(result);

    답은 똑같이 9317이 나왔다..

    '1. JAVA > 1.2 실습' 카테고리의 다른 글

    JAVA_06_실습_배열  (0) 2022.03.16
    JAVA_05_실습_반복문과 조건문3  (0) 2022.03.16
    JAVA_04_실습_반복문과 조건문  (0) 2022.03.14
    JAVA_03_실습_연산자2  (0) 2022.03.14
    JAVA_02_실습_연산자  (0) 2022.03.14
Designed by Tistory.