U E D R , A S I H C RSS

Lotto/송지원

문제 설명

링크 http://poj.org/problem?id=2245
개요 임의의 수 중에서 당첨번호 6개를 뽑아낸다.
입력 여러 개의 테스트 케이스, 각 줄의 첫번째 숫자는 6부터 13 사이 임의의 숫자 갯수, 그 뒤에는 첫번째 숫자 갯수 만큼의 정수가 뒤이어 나와야 한다.
출력 각 테스트 케이스에 대해, 가능한 모든 방법의 수를 오름차순으로 정렬. 각 테스트 케이스는 비어있는 하나의 줄로 분리.

Status

Run ID User Problem Result Memory Time Language Code Length Submit Time
9215091 enochbible 2245 Accepted 164K 16MS C 1246B 2011-08-23 09:04:53
  • 확실히 C가 빠르긴 하네요-_-;;

Source Code

#include <stdio.h> 
#include <stdlib.h> 
  
int nc6( int n ) {  // nC6 함수

    int res = 1; 
    int i; 
  
    for( i = 0; i < 6; i++ ) 
        res *= n-i; 
  
    res /= 720; 
  
    return res; 
} 
  
int dscanf( int *pnum ) { 
    scanf("%d", pnum); 
    return *pnum; 
} 
  
void main() 
{ 
    int n; 
    int *nums; 
    int dmy[6]; // dummy variable set 
    int i, j, k; 
  
    while( dscanf(&n) != 0 ) { 
        nums = (int *)malloc(sizeof(int) * n); 
  
        for( i = 0; i < n; i++ ) 
            scanf("%d", &nums[i]);
  
        for( i = 0; i < 6; i++ )  
            dmy[i] = i; 
  
        for( i = 0; i < nc6(n); i++ ) { 
            for( j = 0; j < 6; j++ ) { 
                printf("%d", nums[dmy[j]]); 
                  
                if( j != 5 ) printf(" ");
                else printf("\n");
            } 
  
            dmy[5]++; 
            for( j = 0; j < 5; j++ ) { 
                if( dmy[5-j] == n-j ) { 
                    dmy[5-j-1]++; 
  
                    for( k = 5-j; k < 6; k++ ) 
                        dmy[k] = dmy[k-1] + 1; 
                } 
            } 
        } 
  
        printf("\n"); 
  
        free(nums); 
    } 
}

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2011-08-23 01:19:39
Processing time 0.0862 sec