[C언어 소스] 로또 발생기 (발생 빈도 순으로 정렬)

다음은 C언어로 작성한 로또 번호 발생하는 코드입니다. 여기에서는 어느 숫자가 가장 많이 발생하는지 발생 빈도순으로 정렬하여 출력합니다.

요구 사항: 1~45 사이의 랜덤한 수를 10,000번 발생하여 발생 빈도수 순으로 출력하시오.

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int main()
{
    int arr[45] = { 0 };//각 수가 몇 번 발생했는지 기억할 배열
    int *parr[45] = { 0 };//간접 정렬에 사용할 배열
    int rvalue = 0;//1~45 사이의 랜덤 값을 기억할 변수
    int i = 0,j=0; //반복문 루프 카운터

    //프로그램을 실행할 때마다 랜덤 값 발생 순서가 바뀔 수 있게
    //씨앗 값(Seed Value)를 현재 시각으로 설정
    srand((unsigned)time(0));

    for (i = 0; i < 10000; i++)
    {
        rvalue = rand() % 45 + 1;//0~44 범위의 랜덤 값에 1을 더하여 rvalue에 대입
        arr[rvalue - 1]++;//발생한 수의 빈도를 1 증가함
    }

    //간접 정렬할 배열의 원소 값을 초기 설정
    for (i = 0; i < 45; i++)
    {
        parr[i] = arr + i;//각 원소의 메모리 주소를 값으로 설정
    }

    //버블 정렬 알고리즘으로 간접 정렬한 것입니다.
    for (i = 45; i > 1; i--)//정렬할 범위를 좁혀가면서
    {
        for (j = 1; j < i; j++)//j를 앞에서 i까지  순차적 이동
        {
            if (*(parr[j - 1])>*(parr[j]))//앞쪽 원소가 더 크면
            {
                //두 개의 원소 값을 교환
                int *temp = parr[j - 1];
                parr[j - 1] = parr[j];
                parr[j] = temp;
            }
        }
    }

    printf("%8s %8s\n", "숫자", "빈도");
    for (i = 0; i < 45; i++) 
    {
        j = parr[i] -arr;//인덱스 계산
        printf("%8d %8d\n", j+1, arr[j]);//숫자와 빈도 출력
    }

    return 0;
}
로또 발생 실행 결과
실행 결과

다음 코드는 로또 100장 발생 코드입니다.