본문 바로가기
Java & Kotlin/Java

20.11.04 - 반복문 예제

by heekng 2021. 1. 19.
반응형
 

1. 1에서 100까지의 정수 중에서 2, 3, 5, 7의 배수를 제외한 수를 한행에 10개씩 출력하세요.

int cnt = 0;

for (int i = 1; i < 101; i++) { //초기값 1, 1씩증가하며 100까지만 반복하는 for문

if(i % 2 !=0 && i % 3 != 0 && i % 5 !=0 && i % 7 != 0) {

//i가 2, 3, 5, 7의 배수가 아닐 때에만 출력

System.out.print(i+"\t");

cnt++; //출력할 때에만 cnt++

}

if(cnt == 10) { //숫자를 10개 출력했을 때

System.out.println(); //줄넘김

cnt = 0; //cnt 0으로 초기화

}

}


2. 다음을 출력하는 프로그램을 중첩된 for문을 이용하여 작성하시오.

힌트) Math.abs(): 절대값을 구하는 메소드 예)-7이면 7

sol 1)

Scanner sc = new Scanner(System.in); //스캐너 생성

System.out.print("행 수 입력: ");

int num = sc.nextInt(); //행 수 입력

for (int i = 0; i < num; i++) { //정해진 행 만큼 반복

for (int j = 0; j < num-i-1; j++) { //공백 생성

System.out.print(" ");

}

for (int j = -i; j <= i; j++) { //수 입력

System.out.print(Math.abs(j));

}

System.out.println(); //줄바꿈

}

sol 2)

int i, j;

int num = 8; //행수를 num에 저장

for(i=0; i < num; i++) { //행 수만큼 반복

for (j = num; j >= -num; j--) { //열 수만큼 반복 (-8 ~ 8)

if(Math.abs(j) > i) {//열 (-8 ~ 8)보다 행이 클 때 공백 출력

System.out.print(' ');

}else {

System.out.print(Math.abs(j));

}

}

System.out.println(); //줄넘김

}


3. 표준 입력으로 입력한 정수에서 각각의 자리에 해당하는 수를 반대로 출력하는 프로그램을 do~while문을 이용하여 작성하시오.

Scanner sc = new Scanner(System.in); //스캐너 생성

System.out.print("정수 입력: ");

int num = sc.nextInt(); //정수 입력

System.out.print("자릿수를 바꾼 수: ");

do {

System.out.print(num % 10); //정수를 10으로 나눈 나머지 == 1의 의 자리 출력

num /= 10; //정수를 10으로 나눈 몫을 다시 저장

} while (num > 0); //숫자가 남아 있을 때 다시 반복


4. 다음 수식과 내용을 참고로 해당하는 x와 y값을 출력하는 프로그램을 작성하시오.

y = 4x3 + 5x2 + x + 2, x는 5에서 10사이 0.5씩 증가하도록

double y;

System.out.println("y = 4x^3 + 5x^2 + x + 2"); //방정식 출력

for (double x = 5; x <= 10; x += 0.5) { //x 초기값 5, 0.5씩 증가하며 10이하일 때만 반복하는 for문

y = 4 * Math.pow(x, 3) + 5 * Math.pow(x, 2) + x + 2;

//Math.pow(a, b) == a의 b제곱

//y에 방정식 입력

System.out.println("x = "+x+" y = "+y); //x, y값 출력

}


5. 다음 조건을 만족하는 프로그램을 작성하시오.

원금이 1,000,000인 경우, 예치 기간을 1년에서 10년까지 매년 말에 받을 총 금액을 출력

년 단위 단리이자 = 원금 * 이율(4.5%) * 년(예치기간)

만기 시 총 수령액(년리 적용) = 원금(1+ 이율(4.5%) * 년(예치기간)

Scanner sc = new Scanner(System.in);

int won;

double yearWon=0;

System.out.print("원금 입력: ");

won = sc.nextInt();

for (int i = 0; i < 10; i++) {

System.out.print(i+1+"년: ");

yearWon = won * 0.045 * (i+1);

System.out.println(yearWon);

}

System.out.println("원금 + 이자: "+(yearWon+won));

System.out.println("만기 시 총 수령액: "+won*(1+(0.045*10)));


6. 다음 식을 참고로 섭씨 온도(C)를 화씨 온도(F)로 변환하는 프로그램을 다음과 같은 출력이 나오도록 작성하시오.

F = (9.0 / 5.0 ) * C + 32;

섭씨 온도가 -60 ~140까지 20씩 증가, 이 때 화씨온도를 구하여 출력하는 온도는 모두 정수 형태로 출력

double F;

for (int C = -60; C <= 140; C+=20) { //c 초기값 -60, 20씩 증가하며 140 이하일 때만 반복하는 for문

System.out.print("섭씨 온도: "+C+"\t화씨 온도: ");

F = (9.0 / 5.0) * C + 32; //화씨온도 방정식

System.out.println((int)F); //화씨온도 정수형으로 형변환하여 출력

}


7. 1부터 n까지 합 중에서 5000을 넘지 않는 가장 큰 합과 그때에 n을 구하는 프로그램 작성하시오.

int sum=0, i;

for (i = 1; sum <= 5000; i++) { //i 초기값 1, 1씩 증가하며 sum이 5000 이하일 때 반복하는 for문

sum += i; //sum에 i값 더하기

System.out.println(i+"번째"+sum);

}

System.out.println("결과 "+(i-2));

//for문이 끝나면 마지막 반복이 5000을 넘었다는 것이며, 마지막 증감식까지 진행되었기 때문에

//i-2가 5000을 넘지 않는 마지막 n이다.


8. 구구단 출력하기

// a X b = n이라 할 때,

for (int i = 2; i < 10; i++) { //x에 해당하는 수 2~9

for (int j = 2; j < 10; j++) { //y에 해당하는 수 2~9

System.out.print(i+" X "+j+"="+i*j+" "); //가로로 출력

}

System.out.println(); //하나의 단이 끝나면 줄넘김

}

System.out.println();

for (int i = 2; i < 10; i++) {

for (int j = 2; j < 10; j++) {

System.out.print(j+" X "+i+"="+i*j+" "); //세로로 출력

}

System.out.println();

}


9. 아래와 같이 출력하시오

[1, 1] [1, 2] [1, 3] [1, 4] [1, 5]

[2, 1] [2, 2] ...................... [2, 5]

:

[5,1] [5,2][5,3][5,4][5,5]

for (int i = 1; i < 6; i++) { //i는 1~5까지 반복

for (int j = 1; j < 6; j++) {//j는 1~5까지 반복

System.out.print("["+i+", "+j+"]\t"); //[i, j]출력

}

System.out.println(); //j가 5까지 출력 된 후에 줄바꿈

}


10. 아래와 같이 출력하세요.

[1,1]

[2,2]

[3,3]

[4,4]

[5,5]

for (int i = 1; i < 6; i++) {

System.out.println("["+i+", "+i+"]");

}


11. 가위 바위 보 게임 만들기

Math.random()함수 이용 과정:

기본은 0.0 <= Math.random() < 1.0

1~3까지 랜덤하게 나오는 수를 만들어 보기

1단계 가장 큰수 0.0*3 <= Math.random() * 3 < 1.0*3

0.0 <= Math.random() * 3 < 3.0

2단계 정수형을 형변환한다.

(int)0.0 <= (int)(Math.random() * 3) < (int)3.0

0 <= (int)(Math.random() * 3) < 3

3단계 각변 1을 더한다.

1 <= (int)(Math.random() * 3) + 1 < 4

(if문 이용)

Scanner sc = new Scanner(System.in); //스캐너 생성

int com = (int)(Math.random()*3) + 1; //Math.random() 함수를 이용해 컴퓨터의 값을 1~3중 하나로 랜덤 출력

System.out.print("가위(1), 바위(2), 보(3)중 하나를 입력하세요--> ");

int choice = sc.nextInt();

System.out.println("당신은 "+choice+" 입니다.\n컴퓨터는 "+com+" 입니다.");

if((choice-com) == 1 || (choice-com) == -2) { //이기는 경우

System.out.println("유저 승리입니다.");

}else if(choice == com) { //비기는 경우

System.out.println("비겼습니다.");

}else { //그 외의 경우(컴퓨터가 이기는 경우)

System.out.println("컴퓨터 승리입니다.");

}

(switch ~ case문 이용)

Scanner sc = new Scanner(System.in); //스캐너 생성

int com = (int)(Math.random()*3) + 1; //Math.random() 함수를 이용해 컴퓨터의 값을 1~3중 하나로 랜덤 출력

System.out.print("가위(1), 바위(2), 보(3)중 하나를 입력하세요--> ");

int choice = sc.nextInt();

System.out.println("당신은 "+choice+" 입니다.\n컴퓨터는 "+com+" 입니다.");

switch (choice) {

case 1: //유저가 가위를 냈을 경우

if(com == 1) System.out.println("비겼습니다."); //컴퓨터가 가위를 냈을 경우

if(com == 2) System.out.println("컴퓨터 승리입니다."); //컴퓨터가 바위를 냈을 경우

if(com == 3) System.out.println("이겼습니다."); //컴퓨터가 보를 냈을 경우

break;

case 2: //유저가 바위를 냈을 경우

if(com == 1) System.out.println("이겼습니다."); //컴퓨터가 가위를 냈을 경우

if(com == 2) System.out.println("비겼습니다."); //컴퓨터가 바위를 냈을 경우

if(com == 3) System.out.println("컴퓨터 승리입니다."); //컴퓨터가 보를 냈을 경우

break;

case 3: //유저가 보를 냈을 경우

if(com == 1) System.out.println("컴퓨터 승리입니다."); //컴퓨터가 가위를 냈을 경우

if(com == 3) System.out.println("비겼습니다."); //컴퓨터가 바위를 냈을 경우

if(com == 2) System.out.println("이겼습니다."); //컴퓨터가 보를 냈을 경우

break;

default: //잘못된 숫자를 입력한 경우

System.out.println("1, 2, 3중 하나를 입력해주세요.");

break;

}


12. 숫자 맞추기 게임

Scanner sc = new Scanner(System.in); //스캐너 생성

int user;

int com = (int)(Math.random()*100) + 1; //컴퓨터가 1~100중 하나의 값을 가져온다.

do {

System.out.print("1과 100사이의 정수를 입력하세요. ==> ");

user = sc.nextInt(); //정수 입력

if(com > user) { //컴퓨터의 수보다 작을 때

System.out.println("더 큰 값으로 다시 시도하세요.");

}else if(com < user) { //컴퓨터의 수보다 클 때

System.out.println("더 작은 값으로 다시 시도하세요.");

}else { //그 외 (정답)일 때

System.out.println("정답입니다.");

}

}while(user != com); //틀렸을 때 반복


13. 숫자를 계속 입력받는다 0을 입력하면 지금까지 입력한 숫자를 모두 더한 것을 출력한다. 반복문을 이용한 계산하기

힌트) flag를 이용하여 boolean flag=true;로 하고 반복문의 조건을 flag로 한다. 이후 0이 입력되면 flag을 false로 바꾼다.

Scanner sc = new Scanner(System.in); //스캐너 생성

int sum=0;

boolean flag = true; //flag를 true로 저장

do {

System.out.println("합계를 구할 숫자를 입력하세요(끝내려면 0을 입력)");

int num = sc.nextInt(); //정수 입력

sum+=num; //입력한 정수를 sum에 더하기

if(num == 0) flag = false; //0을 입력받았을 때, flag를 false로 저장

} while (flag); //flag가 true일 때에만 반복

System.out.println("합계: "+sum); //합계 출력


14. 정수를 문자열로 입력받아 각 자리수 합 구하기

Scanner sc = new Scanner(System.in); //스캐너 생성

int sum=0;

String num;

System.out.print("정수 입력: ");

num = sc.next(); //문자열로 정수 입력

int num1 = Integer.parseInt(num); //Integer.parseInt()로 문자열로 입력받은 정수를 int형으로 변환

for (int i = 0; num1 > 0; i++) { //num1이 0보다 클 때에만 반복

sum += num1 % 10; //num1을 10으로 나눈 나머지 (1의자리)를 sum에 더하기

System.out.println("sum = "+sum+" number = "+num1); //

num1 /= 10; //num1을 10으로 나눈 값을 num1에 저장 (1의 자리 없애기)

}

System.out.println("각 자리수의 합: "+sum);

  •  

 

반응형