다음은 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장 발생 코드입니다.