-
JAVA_05_실습_반복문과 조건문21. 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
==> 16456public 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