본문 바로가기
Programming Study/절대JAVA

[절대JAVA]4장 프로그래밍 연습문제(2)

by 푸고배 2018. 9. 20.

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

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

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

<소스코드>

package Chapter4_6;

public class Chapter4_6 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for(int c=-60;c<140;c+=20) {
			System.out.println("섭씨온도(C) : "+c+", 화씨온도(F) : "+(int)((9.0/5.0)*c+32));
		}
	}

}

 

 

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

<소스코드>

package Chapter4_7;

public class Chapter4_7 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n=1;
		int sum=0;
		while(true) {
			sum+=n;
			if(sum>5000){
				sum-=n;
				n-=1;
				break;
			}else {
				n++;
			}
		}
		System.out.println("n : "+n+", sum : "+sum);
	}

}

 

8. 다음과 같은 레기드 배열을 만든 후, 다음 배열 갑슬 출력하면서 각 행의 합과 평균도 함께 출력하는 프로그램을 작성하시오.

<소스코드>

package Chapter4_8;

public class Chapter4_8 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int arr[][] = {{78,48,78,98},{99,92},{29,64,83},{34,78,92,56}};
		int sum=0;
		for(int tmp[] : arr) {
			for(int i : tmp) {
				System.out.print(i+" ");
				sum+=i;
			}
			System.out.println("\t 합 : "+sum+", 평균 : "+(double)sum/tmp.length);
			sum=0;
		}
	}

}

 

9. 다음 [에라토스테네스의 체] 알고리즘을 이용하여 1에서 1000까지의 소수를 구해 한 행에 20개씩 출력하는 프로그램을 작성하시오.

- 2에서 n(1000)까지 수를 모두 체에 삽입

* 정수형 배열 prime을 배열 크기 1001개를 선언하여 모두 0을 대입한 후, 다시 배열 prime[2]에서 prime[1000]까지 1을 대입, 즉 prime[i]가 1이면 i는 소수

- 2의 2번째 배수부터 배수는 소수에서 제거, 3의 2번째 배수부터 배수는 소수에서 제거, sqrt(n)의 배수까지 소수에서 제거하면 나머지는 모두 소수

- 제거되지 않은 수는 소수이므로 출력

* 이제 i를 2에서 1000까지 prime[i] == 1 이면 i를 출력

 

 

<소스코드>

package Chapter4_9;

public class Chapter4_9 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int prime[]= new int[1001];
		prime[0]=0;
		prime[1]=0;
		int count=0;
		for(int i=2;i<=1000;i++) {
			prime[i]=1;
			if(i!=2&&i%2==0) { // 2가 아닌 2의 배수는 소수에서 제외
				prime[i]=0;
			}
			if(i!=3&&i%3==0) { // 3이 아닌 3의 배수는 소수에서 제외
				prime[i]=0;
			}
			if(i%Math.sqrt((double)i)==0) { // n이 n의 제곱근의 배수이면 소수에서 제외
				prime[i]=0;
			}
			if(prime[i]==1) {
				System.out.print(i+"\t");
				count++;
				if(count%20==0&&count!=0) { // count가 0이 아니고 20으로 나누어 떨어지면
					System.out.println();
				}
			}
		}
	}

}

 

10. 다음을 참고로 [파스칼의 삼각형]을 출력하는 프로그램을 작성하시오.

- 정수형 이차원 배열을 다음과 같이 [파스칼의 삼각형]을 저장할 수 있도록 레기드 배열로 처리

- 1행에서 10행까지 위에서 정의된 래기드 배열에 [파스칼의 삼각형]의 다음 값을 저장후 출력

* nCr = n!/(r!(n-r)!)

 

<소스코드>

package Chapter4_10;

public class Chapter4_10 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int arr[][] = new int[10][]; // 파스칼 삼각형을 담을 배열
		int tmp1=1, tmp2=1; // tmp1는 분자, tmp2는 분모
		for(int n=0;n<10;n++) {
			arr[n] = new int[n+1]; // 행의 번호에 따라 레기드 배열 열 생성
			for(int r=0;r<=n;r++) { 
				for(int a=n;a>n-r;a--) {
					tmp1*=a; // 분자 n n-1 ... n-r+1
				}
				for(int b=r;b>=1;b--) { // 분모 r r-1 ... 1
					tmp2*=b;
				}
				arr[n][r]= tmp1/tmp2;
				System.out.print(arr[n][r]+" ");
				tmp1=1;tmp2=1; // 재사용을 위한 초기화
			}
			System.out.println();
		}
	}

}

 

참고자료 : 인피니티북스 절대 JAVA

github 주소 : 

https://github.com/ch1517/Network-programming/tree/master/Chapter4

반응형

댓글