본문 바로가기
카테고리 없음

[과제] Java 연습문제 01

by 구라미 2019. 5. 27.

지난주 5월 24일 ~ 27일 휴강이었다.

과제 1) 누적의 합을 구하시오.


1+....+10 =55 
1+....+20 =210 
1+....+30 = 

1+....+90 = 
1+....+100 = 5050 

*이중 반복문 이용하기 
*힌트 회전수 증가

 

// 문제 1) 누적의 합을 구하시오.

	/*
	 * 1+....+10 =55 1+....+20 =210 1+....+30 = 1+....+90 = 1+....+100 = 5050
	 * 
	 * 이중 반복문 이용하기 힌트 회전수 증가
	 */

	int sum = 0;
	for (int a = 1; a <= 10; a++) {
		for (int b = 1; b <= a * 10; b++) {
			sum = sum + b;
		}
		// System.out.println(sum);
	}
	System.out.println("문제 1의 답은: " + sum);
				
// ------------------------------------------------------------------------------------

 

과제 2) 
1~1000까지의 합 중 그 합이 10000이 넘을 때 결과를 출력 후 실행 종료.
출력결과) 1+2+3+4...... 합이 10000이 넘는 언젠가 종료.

// 문제 2)
// 1~1000까지의 합 중 그 합이 10000이 넘을 때 결과를 출력 후 실행 종료.
// 출력결과) 1+2+3+4...... 합이 10000이 넘는 언젠가 종료.

	int tSum = 0;
	int count1 = 0;
	for (int a = 1; a <= 1000; a++) {

		for (int b = a; b <= a; b++) {
			if (tSum < 10000) {
				tSum = tSum + b;
				count1 = count1 + 1;
				break;
			} // if문 end
		} // for문 end
	} // for문 end

	System.out.println("문제 2의 답은: " + tSum);


// ------------------------------------------------------------------------------------

과제 3) 
3의 배수의 누적 합이 100이 넘어가려면 3부터 어디까지 더해야 하는 지 구하시오 
출력결과) 3+6+9+12+...=

// 문제 3)
//3의 배수의 누적 합이 100이 넘어가려면 3부터 어디까지 더해야 하는 지 구하시오 
//출력결과) 3+6+9+12+...=
				
	int sum3 = 0;
	int count3 = 0;
	int c = 3;
	int a = 1;

	System.out.print("문제 3의 답은: ");
	while (sum3 < 100) {
		sum3 = sum3 + (a * c);
		System.out.print("+" + a * c);
		a++;

		count3 = count3 + 1;
		// System.out.println(count3);
		// System.out.println(sum3);
		// System.out.println(count3);
	}//while end
				
	System.out.print("=" + sum3);
	System.out.println(", " + c + "의 " + count3 + "배수까지 더 한다.");
				

// ------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------------------------------- 

 

과제 4) 
로또번호 1~45 사이 중에서 서로 겹치치 않게 6개 발생 
int[] lotto = new int[6];

 

				
// 문제 4)
// 로또 추첨기 1-45 / 배열로 받아와서 겹치면 다시
				
	int lotto[] = new int[6];

	for (int l = 0; l < lotto.length; l++) {
		lotto[l] = (int)((Math.random()*45))+1;
		for(int m=0; m<l; m++) {
			if(lotto[l] == lotto[m]) {
				l--;
				break;
			}//if end
		}//for end
	}//for end		
				
	for(int l=0; l<lotto.length; l++) {
		System.out.print(lotto[l]+ " ");
	}
	System.out.println("입니다.");

				
// ------------------------------------------------------------------------------------

 

 

//------------------------------------------------------------------------------------------------------------------- 

 

과제 5) 
su행렬의 대각선 방향의 각 요소의 합을 구하시오 
//대각선 ↘ 방향의 합 (4+9+7) 
//대각선 ↙ 방향의 합 (2+9+6) 

int [][] su = { 
{4,3,2}, 
{5,9,1}, 
{6,8,7} 
}; 

위의 su배열에서 행과 열을 바꿔서 출력하시오. <- 스왑변수 
전치행렬

4 5 6

3 9 8

2 1 7

 

// 문제 5)
//su행렬의 대각선 방향의 각 요소의 합을 구하시오 
				
	int[][] su = { 
			{ 4, 3, 2 }, // 0 2 0 4 00 01 02
			{ 5, 9, 1 }, // 1 1 2 2 10 11 12
			{ 6, 8, 7 } // 2 0 0 4 20 21 22		
			};
				
	// 5-1 대각선 ↘ 방향의 합 (4+9+7) 
	int suRow = su.length;
	int sHap = 0;
	int sHap2 = 0;

	for (int i = 0; i < suRow; i++) {
		int suCol = su[i].length;

		for (int b = 0; b < suCol; b++) {
			if (i == b) {
				sHap = sHap + (su[i][b]);
				// System.out.println(su[i][b]);

			}
		}
	}
	System.out.println("대각선 ↘ 방향의 합은: " + sHap);

	// 5-2 대각선 ↙ 방향의 합 (2+9+6) 
	for (int i = 0; i < suRow; i++) {
		int suCol = su[i].length;
		for (int b = suCol - 1; b >= 0; b--) {

			if ((i + b) == suCol - 1) {
				sHap2 = sHap2 + (su[i][b]);
			}
		}

	}
	System.out.println("대각선 ↙ 방향의 합은: " + sHap2);
			
	// 5-3 위의 su배열에서 행과 열을 바꿔서 출력하시오. <- 스왑변수 
	//전치행렬

	//4 5 6
	//3 9 8
	//2 1 7
				
	//	4 3 2 00 01 02
	//	5 9 1 10 11 12
	//	6 8 7 20 21 22
				
	//	4 5 6 00 10 20
	//	3 9 8 01 11 21
	//	2 1 7 02 12 22
				
	int[][] swapArr = new int[3][3];

	for (int i = 0; i < suRow; i++) {
		int suCol = su[i].length;
		for (int b = 0; b < suCol; b++) {
			swapArr[i][b] = su[b][i];
			System.out.print(swapArr[i][b]+" ");
		}
	}
				
	System.out.println();
				
// ------------------------------------------------------------------------------------

 

 

//------------------------------------------------------------------------------------------------------------------- 

 

과제 6) 
행렬 각각의 합, 차를 구하시오 
int[][] aa={ 
{4,3}, 
{5,9} 
}; 

int[][] bb={ 
{4,3}, 
{5,9} 
}; 

int[][] cc ={{0,0}, {0,0}}; //합  
// 5 5 
// 11 16 

int[][] dd ={{0,0}, {0,0}}; //차 
// 3 1 

// -1 2 

 



// 문제 6) 
// 행렬 각각의 합, 차를 구하시오 
	int[][] aa={ 
				{4,3}, 
				{5,9}  }; 

	int[][] bb={ 
				{1,2}, 
				{6,7} 	};
				
	int[][] resultMin = new int[2][2];
	int[][] resultPl = new int[2][2];
							
		for(int k=0; k<aa.length; k++) {
			for(int h=0; h<aa.length; h++) {
				resultPl[k][h] = aa[k][h]+ bb[k][h];							
				System.out.println("두 배열의 합은 "+ resultPl[k][h]);

			}				
		}
			
		for(int k=0; k<aa.length; k++) {
			for(int h=0; h<aa.length; h++) {
				resultMin[k][h] = aa[k][h] - bb[k][h];
				System.out.println("두 배열의 차는 "+ resultMin[k][h]);
			}				
		}
					

//	int[][] cc ={{0,0}, {0,0}}; //합  
//	// 5 5 
//	// 11 16 
//
//	int[][] dd ={{0,0}, {0,0}}; //차 
//	// 3 1 
//	// -1 2 
				
				
				
// ------------------------------------------------------------------------------------


//------------------------------------------------------------------------------------------------------------------- 
과제 7) 
10진수값을 2진수값으로 변환 후 // 출력하시오. 
int binary =13;  //1101 for문으로 2를 계속 나누어서 몫이 있으면 1, 없으면 0 그리고 나머지

 

// 문제 7) 10진수값을 2진수값으로 변환 후 // 출력하시오. 
				
		int binary =13;  
				
		int [][] numBinary = {
			{0000,0001,0010,0011},
			{0100,0101,0110,0111},
			{1000,1001,1010,1011},
			{1100,1101,1110,1111}
		};
				
		for(int z=0; z<numBinary.length; z++) {
			for(int x=0; z<numBinary[z].length; x++) {
				if(z==3 && x==0) {
					System.out.println(numBinary[z][x]);
				}
			}
		}

 

 

선생님 풀이

 

// 문제 1) 누적의 합을 구하시오.

/*
* 1+....+10 =55 1+....+20 =210 1+....+30 = 1+....+90 = 1+....+100 = 5050
* 
* 이중 반복문 이용하기 힌트 회전수 증가
*/

int sum = 0;
for (int a = 10; a <= 100; a=a+10) {
	sum = 0; //초기화시키는 값 *프로그래밍할 때 초기화는 중요
	for (int b = 1; b <= a; b++) {
		sum = sum + b;
		//sum이 55에서 ->0으로 값을 되돌리고 다시 더해야 함.
		//초기화가 안되어있어서 다 합했을때 값이 안맞음.
	}
	// System.out.println(sum);
}
System.out.println("문제 1의 답은: " + sum);

//결과값
//5050

sfsdfsdfsdfsd

 

// 문제 2)
// 1~1000까지의 합 중 그 합이 10000이 넘을 때 결과를 출력 후 실행 종료.
// 출력결과) 1+2+3+4...... 합이 10000이 넘는 언젠가 종료.

int k = 1;
int hap = 0;
while(k<=1000){
	hap = hap+k; //반복할 연산
	if(hap>10000){ //끝내는 조건
		System.out.println("문제 2의 답은: " + hap);
		break;
	}
	k++; //다음수로 1씩 증가
}//while문 end

//결과값
//10011

ㄴㅇㄹㄴㅇㄹㅇㄴㄹㄴㅇㄹ

 

// 문제 3)
//3의 배수의 누적 합이 100이 넘어가려면 3부터 어디까지 더해야 하는 지 구하시오 
//출력결과) 3+6+9+12+...=
		
int thsum = 0;
int num = 0;
String result ="";

while(true){
	num = num + 3;
	thsum = thsum + num;
	result = result + num + "+";
	if(thsum>100){
		break;
	}			
}//while end
		
System.out.println(result + "...="+thsum);

//결과값
//3+6+9+12+15+18+21+24+...=108
//24까지 

 

 

ㄴㅇㄹㄴㅇㄹㄴㅇㄹㄴㅇㄹ

		// 문제 4)
		// 로또 추첨기 1-45 / 배열로 받아와서 겹치면 다시
		
		int lotto[] = new int[6];
		int size = lotto.length;
		
		for(int i=0; i<size; i++){
			lotto[i]=(int)((Math.random()*45)+1);
			for(int j=0; j<i; j++){
				if(lotto[i]==lotto[j]){
					i--;
					break;
				}//if end
			}//for end
		}//for end
		
		
		Arrays.sort(lotto); //ascending sort
		
		for(int i=0; i<size; i++){
			System.out.print(lotto[i]+" ");
		}

 

 

ㄴㅇㄹㄴㅇㄹㅇㄴㄹ

 

// 문제 5)
//su행렬의 대각선 방향의 각 요소의 합을 구하시오 
		
int[][] su = { 
		{ 4, 3, 2 }, // 0 2 0 4 00 01 02
		{ 5, 9, 1 }, // 1 1 2 2 10 11 12
		{ 6, 8, 7 } //  2 0 0 4 20 21 22		
		};
		
// 5-1 대각선 ↘ 방향의 합 (4+9+7) 
//su[0][0]+su[1][1]+su[2][2]
		
// 5-2 대각선 ↙ 방향의 합 (2+9+6)
//su[0][2] +su[1][1]+su[2][0]
		
int sHap1 = 0;
int sHap2 = 0;

for(int a=0; a<=2; a++){
	sHap1 = sHap1+su[a][a];
	sHap2 = sHap2+su[a][2-a];
}
		
System.out.println("대각선 ↘ 방향의 합은: " + sHap1);
System.out.println("대각선 ↙ 방향의 합은: " + sHap2);
       
//결과값
//20, 17


// 5-3 위의 su배열에서 행과 열을 바꿔서 출력하시오
        //전치행렬
        /*
           4 5 6
           3 9 8
           2 1 7
        */
        int row=su.length;
        for(int a=0; a<row; a++) {
            int col=su[a].length;
            for(int b=0; b<col; b++) {
              System.out.print(su[b][a] + " ");
            }
            System.out.println();
        }//for end   

 

ㄴㅇㄹㄴㄹㄴㅇㄹㄴㅇㄹ

 

//문제 6) 
//행렬 각각의 합, 차를 구하시오 
		
int[][] aa={ {4,3},
             {5,9} };
int[][] bb={ {1,2},
             {6,7} };
   
int[][] cc={ {0,0}, {0,0} }; //합
//  5   5
//  11  16
		   
int[][] dd={ {0,0}, {0,0} }; //차
//  3   1
//  -1  2         
		   
for(int i=0; i<2; i++) {
   for(int j=0; j<2; j++) {
     cc[i][j] = aa[i][j] + bb[i][j]; //합
     dd[i][j] = aa[i][j] - bb[i][j]; //차
   }
}//for end
		   
for(int i=0; i<2; i++) {
    for(int j=0; j<2; j++) {
    System.out.print(cc[i][j] + " ");
    }
   System.out.println();
}//for end
		     
for(int i=0; i<2; i++) {
   for(int j=0; j<2; j++) {
   System.out.print(dd[i][j] + " ");
   }
	System.out.println();
}//for end        
				
	
//int[][] cc ={{0,0}, {0,0}}; //합  
//5 5 
//11 16 
//
//int[][] dd ={{0,0}, {0,0}}; //차 
//3 1 
//-1 2 

 

ssssss

 

// 문제 7) 10진수값을 2진수값으로 변환 후 // 출력하시오. 
		int num = 5;  
		int[] binary = new int[8];
		int count = 0;
		//1101 for문으로 2를 계속 나누어서 몫이 있으면 1, 없으면 0 그리고 나머지
		
		while(true){  //무한 loop
			binary[count] = num%2;
			count++;
			num = num/2;
			
			if(num==1){
				binary[count]=num;
				break;
			}
		}//while end
		
		for(int i=count; i>=0; i--){
			System.out.print(binary[i]);
		}
		
		System.out.println();
		
		//Integer 클래스를 활용한 수의 변환
		System.out.println(Integer.toBinaryString(15));
		System.out.println(Integer.toOctalString(15));
		System.out.println(Integer.toHexString(15));

댓글