[doit자료구조 알고리즘 입문]01-2 반복


01-2 반복


  1. 반복 공부한 내용
    • while문 반복 : while(제어식) 명령문
    • for문 반복 : for(초기화 부분; 제어식; 업데이트 부분) 명령문
    • 양수만 입력하기
    • do-while문 반복 : do문 while(제어식)
    • 구조적 프로그래밍
    • 논리 연산과 드모르간 법칙
    • 다중 루프
    • 직각 이등변 삼각형 출력

연습문제 Q6

package com.doit.chap01_exam;
import java.util.Scanner;
// 1, 2, …, n의 합을 구합니다.

/**
 * 실습 1-4에서 while문이 종료될 때 변수 i값이 n+1이 됨을 확인하세요
 * (변수 I 값을 출력하도록 프로그램을 수정하세요
 */
class SumWhileEx_01_06 {
	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);

		System.out.println("1부터 n까지의 합을구합니다.");
 		System.out.print("n의 값:");
		int n = stdIn.nextInt();

		int sum = 0;				// 합
		int i = 1;

		while (i <= n) {			// i가 n 이하면 반복합니다.
			sum += i;				// sum에 i를 더합니다.
			i++;					// i 값을 1만큼 증가시킵니다.
		}
		System.out.println("1부터 " + n + "까지의 합은 " + sum + "입니다.");
		System.out.println("i의 값은 " + i + "가(이) 되었습니다.");
	}
}

연습문제 Q7

package com.doit.chap01_exam;
import java.util.Scanner;
// 1, 2, …, 7의 합을 구합니다.

/**
 * 실습 1-5 프로그램을 참고하여 n이 7이면 '1+2+3+4+5+6+7=28'로 출력하는 프로그램을 작성하세요
 */
class SumForEx_01_07 {
	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);

		System.out.println("1부터 n까지의 합을 구합니다.");
		System.out.print("n의 값:");
		int n = stdIn.nextInt();

		int sum = 0; // 합

		for (int i = 1; i <= n; i++) {
			if(i < n)
				System.out.print(i + " + ");
			else
				System.out.print(i);
			sum += i; // sum에 i를 더함
		}
		System.out.println(" = " + sum);
	}
}

연습문제 Q8

package com.doit.chap01_exam;

import java.util.Scanner;

/**
 *  1부터 10까지의 합은(1+10)*5와 같은 방법으로 구할 수 있습니다.
 *  가우스의 덧셈이라는 방법을 이용하여 1부터 n까지의 정수 합을 구하는 프로그램을 작성하세요.
 */
public class SumGauss_01_08 {
    public static void main(String[] args) {
        Scanner stdIn = new Scanner(System.in);

        System.out.println("1부터 n까지의 합을 구합니다.");
        System.out.print("n의 값:");
        int n = stdIn.nextInt();
        System.out.println("n % 2 = "+n % 2);
        System.out.println((n + 1) +"*"+ (n / 2)+" + "+(n % 2 == 1 ? (n + 1) / 2 : 0));


        int sum = (n + 1) * (n / 2) + (n % 2 == 1 ? (n + 1) / 2 : 0); // 합

        System.out.println("1부터 " + n + "까지의 합은 " + sum + "입니다.");

        //정답과 다른 나의 방법 아래와 같이 곱하기가 먼저되고 2를 나누면 정답과 같음
        int a = 3997;
        sum = ((a + 1) * a)/2;
        System.out.println("sum = "+sum);
    }
}

연습문제 Q9

1. 정답
package com.doit.chap01_exam;
import java.util.Scanner;

/**
 * 정수 a.b를 포함하여 그 사이의 모든 정수의 합을 구하여 반환하는 아래의 메서드를 작성하세요.
 */
class SumOf_01_09 {
	static int sumof(int a, int b) {
		int min; // a, b의 작은 쪽의 값
		int max; // a, b의 큰 쪽의 값

		if (a < b) {
			min = a;
			max = b;
		} else {
			min = b;
			max = a;
		}

		int sum = 0; // 합
		for (int i = min; i <= max; i++)
			sum += i;
		return (sum);
	}

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);

		System.out.println("a와 b를 포함하여 그 사이의 모든 정수의 합을 구합니다.");
		System.out.print("a의 값:");
		int a = stdIn.nextInt();
		System.out.print("b의 값:");
		int b = stdIn.nextInt();

		System.out.println("정수 a, b 사이의 모든 정수의 합은 " + sumof(a, b) + "입니다.");
	}
}
2. 내가 푼 방법
package com.doit.chap01_exam;

import java.util.Arrays;

/**
 * 정수 a.b를 포함하여 그 사이의 모든 정수의 합을 구하여 반환하는 아래의 메서드를 작성하세요.
 */
public class SumOf_01_09_my {
    public static void main(String[] args) {

        System.out.println(sumof(120,3));

    }

    static int sumof(int a, int b){
        int[] arr = {a, b};
        Arrays.sort(arr);
        print(arr);
        int sum = 0;
        for (int i =arr[0]; i<= arr[1];i++) {
            sum += i;
        }
        return sum;
    }

    static void print(int[] arr){
        int j=0;
        for(int i : arr){
            System.out.println("arr["+(j++)+"] = "+i);
        }
    }
}

연습문제 Q10

1. 정답
package com.doit.chap01_exam;
import java.util.Scanner;
// 정수 b에서 정수 a를 뺀 값을 구합니다(b > a가 되도록 입력 받음)

class Difference_01_10 {
	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);

		System.out.print("a의 값:");
		int a = stdIn.nextInt();

		int b=0;
		while (true) {
			System.out.print("b의 값:");
			b = stdIn.nextInt();
			if (b > a)
				break;
			System.out.println("a보다 큰 값을 입력하세요!");
		}

		System.out.println("b - a는 " + (b - a) + "입니다.");
	}
}
2. 내가 푼 방법
package com.doit.chap01_exam;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;

/**
 * 오른쪽과 같이 두 변수 a,b에 정수를 입력하고 b-a를 출력하는 프로그램을 작성하세요
 */
public class Difference_01_10_my {
    public static void main(String[] args) throws IOException {
        System.out.print("a와 b 값을 입력하세요 : ");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //공백을 구분자로 값을 읽어 들임
        StringTokenizer st = new StringTokenizer(br.readLine());
        Scanner sc = new Scanner(System.in);

        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        System.out.println("a의 값 : "+a);
        System.out.println("b의 값 : "+b);

        while (b <= a) {
            System.out.print("a보다 큰 값을 입력하세요 : ");
            b = sc.nextInt();
        }
        System.out.println("b의 값 : "+b);
        System.out.println("b - a는 "+(b-a)+" 입니다.");


    }
}

연습문제 Q11

1. 정답
package com.doit.chap01_exam;
import java.util.Scanner;
// 양의 정수값의 자릿수를 구하여 나타냄

class DigitsNo_01_11 {
	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);

		System.out.println("양의 정수값의 자릿수를 구합니다.");

		int n;
		do {
			System.out.print("정수값:");
			n = stdIn.nextInt();
		} while (n <= 0);

		int no = 0; 			// 자릿수
		while (n > 0) {
			n /= 10; 			// n을 10으로 나눔
			System.out.println("n = "+n);
			no++;
		}

		System.out.println("그 수는 " + no + "자리입니다.");
	}
}
2. 내가 푼 방법
package com.doit.chap01_exam;

import java.util.Scanner;

/**
 * 양의 정수를 입력하고 자릿수를 출력하는 프로그램을 작성하세요.
 * 예를 들어 135를 입력하면 '그 수는 3자리 입니다.'라고 출력하고, 1314를 입력하면
 * '그 수는 4자리 입니다.'라고 출력하면 됩니다.
 */
public class DigitsNo_01_11_my {
    public static void main(String[] args) {
        System.out.print("양의 정수를 입력하세요 : ");
        Scanner sc = new Scanner(System.in);

        int num = sc.nextInt();
        String val = String.valueOf(num);

        System.out.println(num+"은 "+val.length()+" 자리 입니다.");
    }
}

연습문제 Q12

package com.doit.chap01_exam;
// 곱셈표를 출력합니다.

/**
 * 오른쪽과 같이 위쪽과 왼쪽에 곱한느 수가 있는 곱셈푤르 출력하는 프로그램을 작성하세요
 * 구분선은 수직선 기호(|), 마이너스 기호(-), 플러스 기호(+)를 사용하세요
 */
public class Multi99TableEx_01_12 {
	public static void main(String[] args) {
		System.out.print("   |");
		for (int i = 1; i <= 9; i++)
			System.out.printf("%3d", i);
		System.out.println("\n---+---------------------------");

		for (int i = 1; i <= 9; i++) {
			System.out.printf("%2d |", i);
			for (int j = 1; j <= 9; j++)
				System.out.printf("%3d", i * j);
			System.out.println();
		}
	}
}

연습문제 Q13

package com.doit.chap01_exam;
// 곱셈표를 출력합니다.

/**
 * 곱셈이 아니라 덧셈을 출력하는 프로그램을 작성하세요
 * 위쪽과 왼쪽에 더하는 수를 출력하세요
 */
public class Add99TableEx_01_13 {
	public static void main(String[] args) {
		System.out.print("   |");
		for (int i = 1; i <= 9; i++)
			System.out.printf("%3d", i);
		System.out.println("\n---+---------------------------");

		for (int i = 1; i <= 9; i++) {
			System.out.printf("%2d |", i);
			for (int j = 1; j <= 9; j++)
				System.out.printf("%3d", i + j);
			System.out.println();
		}
	}
}

연습문제 Q14

package com.doit.chap01_exam;

import java.util.Scanner;

/**
 * 오른쪽과 같이 입력한 수를 한 변으로 하는 정사각형을
 *  * 기호로 출력하는 프로그램을 작성하시오
 */
public class Square_01_14 {
    public static void main(String[] args) {
        Scanner sc= new Scanner(System.in);
        int n;

        System.out.println("정사각형 모양으로 나타냅니다.");

        do {
            System.out.print("단수는:");
            n = sc.nextInt();
        } while (n <= 0);

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++)
                System.out.print("*");
            System.out.println();
        }

    }
}

연습문제 Q15

1. 정답
package com.doit.chap01_exam;
import java.util.Scanner;
// 4가지의 직각삼각형 모양으로 나타냄

public class Triangle_01_15 {
	// 왼쪽 아래가 직각인 이등변삼각형을 출력
	static void triangleLB(int n) {
		for (int i = 1; i <= n; i++) { 				// i행 (i = 1, 2, … ,n)
			for (int j = 1; j <= i; j++) 			// i개의 '*'를 나타냄
				System.out.print('*');
			System.out.println(); 					// 개행(줄변환)
		}
	}

	// 왼쪽 위가 직각인 이등변삼각형을 출력
	static void triangleLU(int n) {
		for (int i = 1; i <= n; i++) { 				// i행 (i = 1, 2, … ,n)
			for (int j = 1; j <= n - i + 1; j++) 	// n-i+1개의 '*'를 나타냄
				System.out.print('*');
			System.out.println(); 					// 개행(줄변환)
		}
	}

	// 오른쪽 위가 직각인 이등변삼각형을 출력
	static void triangleRU(int n) {
		for (int i = 1; i <= n; i++) { 				// i행 (i = 1, 2, … ,n)
			for (int j = 1; j <= i - 1; j++) 		// i-1개의 ' '를 나타냄
				System.out.print(' ');
			for (int j = 1; j <= n - i + 1; j++) 	// n-i+1개의 '*'를 나타냄
				System.out.print('*');
			System.out.println();					// 개행(줄변환)
		}
	}

	// 오른쪽 아래가 직각인 이등변삼각형을 출력
	static void triangleRB(int n) {
		for (int i = 1; i <= n; i++) { 				// i행 (i = 1, 2, … ,ln)
			for (int j = 1; j <= n - i; j++) 		// n-i개의 ' '를 나타냄
				System.out.print(' ');
			for (int j = 1; j <= i; j++) 			// i개의 '*'를 나타냄
				System.out.print('*');
			System.out.println(); 					// 개행(줄변환)
		}
	}

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		int n;

		System.out.println("삼각형 모양으로 나타냅니다.");

		do {
			System.out.print("단수는 :");
			n = stdIn.nextInt();
		} while (n <= 0);

		System.out.println("왼쪽 아래가 직각인 삼각형");
		triangleLB(n); // 왼쪽 아래가 직각인 이등변삼각형

		System.out.println("왼쪽 위가 직각인 삼각형");
		triangleLU(n); // 왼쪽 위가 직각인 이등변삼각형

		System.out.println("오른쪽 위가 직각인 삼각형");
		triangleRU(n); // 오른쪽 위가 직각인 이등변삼각형

		System.out.println("오른쪽 아래가 직각인 삼각형");
		triangleRB(n); // 오른쪽 아래가 직각인 이등변삼각형
	}
}
2. 내가 푼 방법
package com.doit.chap01_exam;
import java.util.Scanner;
// 왼쪽 아래가 직각인 이등변 삼각형을 출력합니다.

public class Triangle_01_15_my {
	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		int n;
		System.out.println("왼쪽 아래가 직각인 이등변 삼각형을 출력합니다.");
		do {
			System.out.print("몇 단 삼각형입니까? : ");
			n = stdIn.nextInt();
		} while (n <= 0);

		triangleLB(n);
		System.out.println();
		triangleLU(n);
		System.out.println();
		triangleRU(n);
		System.out.println();
		triangleRB(n);
	}

	//왼쪽 아래가 직각인 이등변 삼각형을 출력
	static void triangleLB(int n){

		for (int i = 1; i <= n; i++){
			for (int j = 1; j <= i; j++) 
				System.out.print('*');
			System.out.println();
		}
	}
	//왼쪽 위가 직각인 이등변 삼각형을 출력
	static void triangleLU(int n){

		for (int i = n; i > 0; i--){
			for (int j = i; j > 0; j--) 
				System.out.print('*');
			System.out.println();
		}
	}
	//오른쪽 위가 직각인 이등변 삼각형을 출력
	static void triangleRU(int n){
		for (int i = n; i > 0; i--){
			for (int s = 0; s < (n-i); s++)
				System.out.print(" ");
			for (int j = i; j > 0; j--)
				System.out.print("*");
			System.out.println();
		}
	}
	//오른쪽 아래가 직각인 이등변 삼각형을 출력
	static void triangleRB(int n){
		for (int i = 1; i <= n; i++){
			for (int s = 0; s < (n-i); s++)
				System.out.print(" ");
			for (int j = 1; j <= i; j++)
				System.out.print("*");
			System.out.println();
		}
	}
}

연습문제 Q16

1. 정답
package com.doit.chap01_exam;
import java.util.Scanner;
// 기호문자 *로 피라미드를 출력함

class StarPira_01_16 {

	static void spira(int n) {
		for (int i = 1; i <= n; i++) { 					// i행 (i = 1, 2, … ,n)
			for (int j = 1; j <= n - i + 1; j++) 		// n-i+1개의 ' '를 나타냄
				System.out.print(' ');
			for (int j = 1; j <= (i - 1) * 2 + 1; j++) 	// (i-1)*2+1개의 '*'를 나타냄
				System.out.print('*');
			System.out.println(); 						// 개행(줄변환)
		}
	}

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		int n;

		System.out.println("피라미드 모양으로 나타냅니다.");

		do {
			System.out.print("단수는 :");
			n = stdIn.nextInt();
		} while (n <= 0);

		spira(n); 		// 피라미드를 나타냄
	}
}
2. 내가 푼 방법
package com.doit.chap01_exam;

import java.util.Scanner;

/**
 * n단의 피라미드를 출력하는 메서드를 작성하세요
 */
public class StarPira_01_16_my {
    public static void main(String[] args) {

        System.out.print("n 값을 입력하세요 : ");
        Scanner sc= new Scanner(System.in);
        int n = sc.nextInt();
        spira(n);
    }

    static void spira(int n){
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n - i; j++) 
                System.out.print(" ");
            for (int j = 0; j <= i; j++) 
                System.out.print("*");
            for (int j = 1; j <= i ; j++) 
                System.out.print("*");
            System.out.println();
        }
    }
}

연습문제 Q17

1. 정답
package com.doit.chap01_exam;
import java.util.Scanner;
// 숫자를 늘어놓아 피라미드를 출력

class NumPira_01_17 {
	static void npira(int n) {
		for (int i = 1; i <= n; i++) { 					// i행 (i = 1, 2, … ,n)
			for (int j = 1; j <= n - i + 1; j++) 		// n-i+1개의 ' '를 나타냄
				System.out.print(' ');
			for (int j = 1; j <= (i - 1) * 2 + 1; j++) 	// (i-1)*2+1개의 '*'를 나타냄
				System.out.print(i % 10);
			System.out.println(); 						// 개행(줄변환)
		}
	}

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		int n;

		System.out.println("피라미드 모양으로 나타냅니다.");

		do {
			System.out.print("단수는 :");
			n = stdIn.nextInt();
		} while (n <= 0);

		npira(n); // 피라미드를 나타냄
	}
}
2. 내가 푼 방법
package com.doit.chap01_exam;

import java.util.Scanner;

/**
 * 아래를 향한 n단의 숫자 피라미드를 출력하는 메서드를 작성하세요
 */
public class NumPira_01_17_my {
    public static void main(String[] args) {
        System.out.println("n값을 입력하세요 : ");
        Scanner sc= new Scanner(System.in);
        int n= sc.nextInt();
        npira(n);

    }

    static void npira(int n){
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j < n - i+1; j++) 
                System.out.print(" ");
            for (int j = 1; j <= i; j++) 
                System.out.print(i);
            for (int j = 2; j <= i; j++) 
                System.out.print(i);
            System.out.println();
        }
    }
}





© 2017. by freelife

Powered by freelife