출처 : 반크_세계유산 경복궁
문제]
아래의 조건에 맞는 프로그램을 작성하시오.
조건]
1. 임의의 3자리수 N개를 무작위로 산출하시오.(3<=N<=100)
2. 임의의 수는 중복되지 않게 산출하시오.
3. 버블정렬을 사용하여 내림차순으로 정렬하시오.
4. 정렬 전 값과 정렬 후 값을 출력하시오.
5. 한라인에 10개씩 출력하시오.
6. 기타사항은 프로그램의 전반적인 로직과 사용 프로그램의 특성을 고려하여
프로그램을 작성하시오.
입력 예)
3
출력 예)
버블정렬 전]
111 555 333
버블정렬 후]
555 333 111
참고풀이]
#include <stdio.h>
#include <stdlib.h> //malloc(), free(), srand(), rand()
#include <time.h> //time()
void BubbleSort(int n, int *R)
{
int a, b;
int imsi;
int cnt;
for(a=0;a<n;a++)
{
for(b=0;b<n-1; b++)
{
if(R[b]<R[b+1])
{
imsi=R[b+1];
R[b+1]=R[b];
R[b]=imsi;
}
}
}
}
int main()
{
int N;
int i,j; //인덱스 또는 반복변수
//무작위 수를 실행할 때마다 다른 값이 나오도록 설정한다.
srand(time(NULL));
//정렬할 자료의 개수를 입력받는다.
scanf("%d",&N);
if(N>=3 && N<=100)
{
//정렬할 자료를 넣을 변수를 선언한다.
int *M=(int *) malloc(sizeof(int)*N);
//선언한 변수에 자료를 넣는다.
for(i=0;i<N;i++)
{
M[i]=rand()%1000;
//생성된 자료가 3자리의 수인 지 체크한다.
if(M[i]>99)
{
//생성된 자료가 중복되었는 지 체크후 저장한다.
for(j=0;j<i;j++)
if(M[i]==M[j])
{
i--;
break;
}
}
else//생성된 수가 3자리의 수가 아니면 인덱스 값을 1줄인다.
i--;
}
//정렬전 자료를 한줄에 10개씩 출력한다.
printf("버블 정렬전]\n");
for(i=0;i<N;i++)
if((i+1)%10) printf("%4d",M[i]);
else printf("%4d\n",M[i]);
//정렬후 결과출력
BubbleSort(N, M);
printf("\n\n버블 정렬후]\n");
for(i=0;i<N;i++)
if((i+1)%10) printf("%4d",M[i]);
else printf("%4d\n",M[i]);
//동적메모리를 해제한다.
free(M);
}
return 0;
}
참고풀이 결과]
대한민국의 아름다운 영토, 독도의 봄
'프로그램 > C언어 1000제' 카테고리의 다른 글
C언어 180제] NCP Nextop Lv.1 단어 길이 재기 (0) | 2024.11.12 |
---|---|
C언어 179제] 2004년 한국정보올림피아드 지역본선 초등부 2번 줄 세우기 (0) | 2024.11.12 |
C언어 177제] 2011/2012 COCI 크로아티아 정보학 공개 경쟁 #6 1번 블랙잭 (1) | 2024.09.25 |
C언어 176제] 2004년 ICPC 서울지역본선 B번 벌집 (0) | 2024.09.20 |
C언어 175제]2005년 ICPC 서울지역예선 B번 분해합 (1) | 2024.09.19 |
댓글