** 실습1 **
/* 1 배열
문제)5개의 정수를 {95, 75, 85, 100, 50}으로 초기화 하고 오름차순으로 정렬하여 출력하는 프로그램
출력예)50 75 85 95 100
*/
int[] arr = {95, 75, 85, 100, 50};
int i, j, tmp;
for(i = 0 ; i < arr.length-1 ; i++)
{
for(j = i + 1 ; j < arr.length ; j++)
{
if(arr[i] > arr[j])
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
for(i = 0 ; i < arr.length ; i++)
{
System.out.printf("%d ", arr[i]);
}
** 실습2 **
/* 2
문제)10개의 정수를 입력받아 배열에 저장할 후 내림차순으로 정렬하는 프로그램.
입력예)95 100 88 65 76 89 58 93 77 99
출력예)100 99 95 93 89 88 77 76 65 58
*/
int[] a = new int[10];
int i, j, tmp;
for(i = 0 ; i < a.length ; i++)
{
a[i] = scn.nextInt();
}
for(i = 0 ; i < a.length-1 ; i++)
{
for(j = i + 1 ; j < a.length ; j++)
{
if(a[i] < a[j])
{
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
for(i = 0 ; i < a.length ; i++)
{
System.out.printf("%d ",a[i]);
}
//바로위 for문을 정식 선택알고리즘으로 변경
int val, idx = 0; //val변수는 기준값 저장, idx변수는 교환할 j인덱스값 저장
for(i = 0 ; i < a.length-1 ; i++)
{
val = a[i];
for(j = i+1 ; j < a.length ;j++) // 100 95 88 65 76 89 58 93 77 99
{
if(val < a[j])
{
val = a[j];
idx = j;
}
}
//최종 자리교환
if(idx > i)
{
tmp = a[i];
a[i] = a[idx];
a[idx] = tmp;
}
//디버깅
System.out.println("i : " + i + ", idx : " + idx);
for(int k = 0 ; k < a.length ; k++)
{
System.out.printf("%d ", a[k]);
}
System.out.println();
idx = i; //0; //초기화 꼭 해야한다.
}
System.out.println();
for(i = 0 ; i < a.length ; i++)
{
System.out.printf("%d ",a[i]);
}
** 실습3 **
/* 3
문제)최대 100개 정수를 입력받다가 0 이 입력되면 종료하고 그때까지 입력된 수 중
5의 배수의 개수와 합계, 평균을 출력하는 프로그램
입력예)35 10 23 100 64 51 5 0
출력예)5의 배수 : 4개
합계 : 150
평균 : 37.5
*/
int[] a = new int[100];
int i, cnt = 0, sum = 0;
double avg;
for(i = 0 ; i < a.length ; i++)
{
a[i] = scn.nextInt();
if(a[i] == 0)
break;
if (a[i] % 5 == 0)
{
cnt++;
sum += a[i];
}
}
avg = (double)sum / cnt;
System.out.printf("5의 배수 : %d개\n", cnt);
System.out.printf("합계 : %d\n", sum);
System.out.printf("평균 : %.1f", avg);
//위에 for문을 for2개로 나누어 처리
int num = 0;
for( i = 0 ; i < a.length ; i++)
{
a[i] = scn.nextInt();
if(a[i] == 0)
break;
num++;
}
for(i = 0 ; i < num ; i++)
{
if(a[i] % 5 == 0)
{
sum += a[i];
cnt++;
}
}
avg = (double)sum / cnt;
System.out.printf("5의 배수 : %d개\n", cnt);
System.out.printf("합계 : %d\n", sum);
System.out.printf("평균 : %.1f", avg);
** 실습4 **
/* 4
문제)100개 이하의 정수를 입력받다가 0이 입력되면 0을 제외하고 그때까지 입력방은
개수를 출력한 후 입력 받은 정수를 차례로 출력하되 그 수가 홀수이며 2배한 값을
짝수이면 2로 나눈 몫을 출력하는 프로그램.
단, 값 출력은 배열을 이용하지 않음.(배열의 입력값은 변경 없음.)
입력예)8 10 5 15 100 0
출력예)5
4 5 10 30 50
*/
int[] arr = new int[100];
int i, cnt = 0;
for(i = 0 ; i < arr.length ; i++)
{
arr[i] = scn.nextInt();
if(arr[i] == 0) break;
cnt++;
}
System.out.println(cnt);
int val;
for(i = 0 ; i < cnt ; i++)
{
if(arr[i] % 2 == 0)
{
val = arr[i] / 2;
}
else
val = arr[i] * 2;
System.out.printf("%d ", val);
}
//위와 동일한 결과로 for문 1번만 사용경우 출력결과 순서변경
int tmp;
for(i = 0 ; i < arr.length ; i++)
{
arr[i] = scn.nextInt();
if(arr[i] == 0)
{
System.out.println("\n" + cnt);
break;
}
cnt++;
if(arr[i] % 2 == 0)
tmp = arr[i] / 2;
else
tmp = arr[i] * 2;
System.out.print(tmp + " ");
}
** 실습5 **
/* 5
문제)정수 10개를 입력받아 최대 값을 출력하는 프로그램 작성.
단, 변수는 배열변수 score와 출력용 max, for문용 i만을 선언함.
정수는 0~100사이 값만 입력받으며 나머지 값 입력시
"숫자의 범위가 초과 되었습니다."
"0~100사이의 숫자를 다시 입력하세요.>"
입력예)110
숫자의 범위가 초과 되었습니다.
0~100사이의 숫자를 다시 입력하세요.>
입력예)95 67 88 65 76 89 58 93 77 99 (입력시마다 하나의 값 입력 후 바로 엔터)
출력예)가장 큰 값은 99입니다.
*/
//for문 1번만 사용할 경우
int[] a = new int[10];
int max = 0, i;
for(i = 0 ; i < a.length ; i++)
{
a[i] = scn.nextInt();
if(a[i] < 0 || a[i] > 100)
{
System.out.println("숫자의 범위가 초과 되었습니다.");
System.out.print("0~100사이의 숫자를 다시 입력하세요.>");
i--;
continue;
}
if(a[i] > max)
{
max = a[i];
}
}
System.out.printf("가장 큰 값은 %d입니다.\n", max);
//while문 사용한 풀이 (for문 2개)
int[] a = new int[10];
int max = 0, i;
for(i = 0 ; i < a.length ; i++)
{
a[i] = scn.nextInt();
while(a[i] < 0 || a[i] > 100)
{
System.out.println("숫자의 범위가 초과 되었습니다.");
System.out.print("0~100사이의 숫자를 다시 입력하세요.>");
a[i] = scn.nextInt();
}
}
max = a[0];
for(i = 1 ; i < a.length ; i++)
{
if(max < a[i])
{
max = a[i];
}
}
System.out.printf("가장 큰 값은 %d입니다.\n", max);
//if 사용 (for문 2개)
int[] a = new int[10];
int max = 0, i;
for(i = 0 ; i < a.length ; i++)
{
a[i] = scn.nextInt();
if(a[i] < 0 || a[i] > 100)
{
System.out.println("숫자의 범위가 초과 되었습니다.");
System.out.print("0~100사이의 숫자를 다시 입력하세요.>");
i--;
continue;
}
}
max = a[0];
for(i = 1 ; i < a.length ; i++)
{
if(max < a[i])
{
max = a[i];
}
}
System.out.printf("가장 큰 값은 %d입니다.\n", max);
** 실습6 **
/* 6
문제)20 이하의 정수 n을 입력받고 n명의 점수를 입력받아 높은 점수 부터 차례로 출력하는 프로그램
입력예)5
35 10 35 100 64
출력예)100 64 35 35 10
*/
int i, j, tmp;
int n = scn.nextInt();
int[] score = new int[n];
for(i = 0 ; i < score.length ; i++)
{
score[i] = scn.nextInt();
}
for(i = 0 ; i < score.length-1 ; i++)
{
for( j = i + 1 ; j < score.length ; j++)
{
if(score[i] < score[j])
{
tmp = score[i];
score[i] = score[j];
score[j] = tmp;
}
}
}
for(i = 0 ; i < score.length ; i++)
{
System.out.print(score[i] + " ");
}
//정렬은 모두 받아두고 밖에서 정렬하는것이 제일 좋다.
** 실습7 **
/* 7
문제)정수 5개를 입력받을 배열을 선언한 후 정수 5개를 입력받아 배열에 저장한 후
배열복사를 통해 크기가 2배인 배열에 복사하고 언래 배열 크기뒤부터 다시 입력
5개를 받아 출력하는 프로그램 작성.
단, 추가 입력까지 모두 한 후에 배열 복사 진행.
입력예)10 20 30 40 50 (arr에 입력)
출력예)arr.length : 5 (arr로 출력)
10 20 30 40 50
입력예)1 2 3 4 5 (tmp에 입력)
배열복사 후 출력
최종출력예)10 20 30 40 50 1 2 3 4 5 (arr로 출력)
*/
'수업끄적끄적_7MONTH > Java' 카테고리의 다른 글
11/13 수업 (11일차) (2) | 2023.11.13 |
---|---|
11/10 수업 (10일차) (0) | 2023.11.10 |
11/08 수업(8일차) (0) | 2023.11.08 |
11/07 수업 (7일차) (1) | 2023.11.07 |
11/06 수업 (6일차) (0) | 2023.11.06 |