Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Lotto/송지원: Difference between revisions

From ZeroWiki
imported>enochbible
No edit summary
(Repair batch-0002 pages from live compare)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
== 코드 ==
== 문제 설명 ==
* Soldiers 해야 하는줄 모르고 하다가 말았던 문제
{| class="wikitable"
|-
| 링크
| [http://poj.org/problem?id=2245]
|-
| 개요
| 임의의 수 중에서 당첨번호 6개를 뽑아낸다.
|-
| 입력
| 여러 개의 테스트 케이스, 각 줄의 첫번째 숫자는 6부터 13 사이 임의의 숫자 갯수, 그 뒤에는 첫번째 숫자 갯수 만큼의 정수가 뒤이어 나와야 한다.
|-
| 출력
| 각 테스트 케이스에 대해, 가능한 모든 방법의 수를 오름차순으로 정렬. 각 테스트 케이스는 비어있는 하나의 줄로 분리.
|}


== Status ==
{| class="wikitable" style="width:100%;"
|-
| 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 <stdio.h>  
  #include <stdlib.h>  
  #include <stdlib.h>  
Line 27: Line 66:
     int n;  
     int n;  
     int *nums;  
     int *nums;  
     int dmy[6]; // dummy variable set  
     int dmy[6]; // dummy variable set  
     int i, j, k;  
     int i, j, k;  
    
    
Line 34: Line 73:
    
    
         for( i = 0; i < n; i++ )  
         for( i = 0; i < n; i++ )  
             scanf("%d", &nums[i]);
             scanf("%d", &nums[i]);
    
    
         for( i = 0; i < 6; i++ )   
         for( i = 0; i < 6; i++ )   
             dmy[i] = i;  
             dmy[i] = i;  
    
    
         for( i = 0; i < nc6(n); i++ ) {  
         for( i = 0; i < nc6(n); i++ ) {  
             for( j = 0; j < 6; j++ ) {  
             for( j = 0; j < 6; j++ ) {  
                 printf("%d", nums[dmy[j]]);  
                 printf("%d", nums[dmy[j]]);  
                    
                    
                 if( j != 5 ) printf(" ");
                 if( j != 5 ) printf(" ");
Line 47: Line 86:
             }  
             }  
    
    
             dmy[5]++;  
             dmy[5]++;  
             for( j = 0; j < 5; j++ ) {  
             for( j = 0; j < 5; j++ ) {  
                 if( dmy[5-j] == n-j ) {  
                 if( dmy[5-j] == n-j ) {  
                     dmy[5-j-1]++;  
                     dmy[5-j-1]++;  
    
    
                     for( k = 5-j; k < 6; k++ )  
                     for( k = 5-j; k < 6; k++ )  
                         dmy[k] = dmy[k-1] + 1;  
                         dmy[k] = dmy[k-1] + 1;  
                 }  
                 }  
             }  
             }  
Line 63: Line 102:
     }  
     }  
  }
  }

Latest revision as of 00:16, 27 March 2026

문제 설명

링크 [1]
개요 임의의 수 중에서 당첨번호 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); 
    } 
}