Work

2005년 중등부 올림피아드 문제 - 3. 숫자카드

runicode 2009. 11. 15. 03:58

2005년도 지역본선 중등부 기출문제

 // 091113_card_01.cpp : Defines the entry point for the console application.
//

/*--------------------------------------------------------------*
| 3. 숫자카드             |
|                |
|  입력형식 : input.txt (첫 라인에 카드의 숫자를 차례로 나열) |
|     - 최초 rand()를 사용하여 카드의 숫자를 얻었으나 |
|    문제의 입력형식과 출력형식이 의도하는 바와  |
|    달라서 수정하였습니다.       |
|  출력형식 : output.txt (첫 라인에 가능한 카드 배열의 수 출력) |
*---------------------------------------------------------------*/

#include <stdio.h>
#include <stdlib.h>  // srand(), atoi()를 위한 include
#include <string.h>  // strlen()을 위한 include

// initialize ; input.txt는 최대 40자 이하의 숫자
int data[40], cnt = 0;

FILE *fIn, *fOut;

/*---------------------------------------------------------------
void random()
{
 int a = 0;
 int n, cnt = 0;
// srand((int)time(NULL));

 printf("? "); 
 scanf("%d", &n);

 while(n)
 {
  // 중복된 수에 대한 처리도 해야 하는가?
  a = rand() % 34 + 1;
  printf("= %d\n", a);
  if(a > 10)
  {
   data[cnt++] = (int)(a/10);
   data[cnt] = a - data[cnt - 1] * 10;
  }
  else data[cnt] = a;
  cnt++; n--;
 }

 // 배열 확인
 for(n = 0; n < cnt; n++)
  printf("> %d\n", data[n]);
}
---------------------------------------------------------------*/

// recursive를 통해 data[]의 끝부터 차례로 경우의 수를 모색
void analyze(int n)
{

 int a;

 // 1회 분석이 끝나면 cnt++
 if(n == -1)
 { 
//  printf("\n\t[cnt]\n");
  cnt++;
 }
 else
 {
  if(n > 0)
  {
   a = data[n - 1] * 10 + data[n];
   
   // 34 이하일 경우 카드 배열 중 하나로서 성립 -> n - 2 부터 분석
   if(a <= 34)
   {
//    printf("in(%d) ", a);
    analyze(n - 2);
//    printf("out(%d) ", a);
   }
  }
//  printf("in(%d) ", data[n]);
  analyze(n - 1);  
//  printf("out(%d) ", data[n]);
 }
}

void main()
{
 char ch;
 int n = 0;

 fIn = fopen("input.txt", "r");
 fOut = fopen("output.txt", "w");

 // 난수발생 -> input.txt로의 입력 변경
// random();

 // input.txt를 int형 array data[40]로 load, EOF까지 while
 while((ch = fgetc(fIn)) != EOF)
  data[n++] = atoi(&ch);

 analyze(n - 1);

 // 가능한 카드 배열의 수 출력
 fprintf(fOut, "%d", cnt);
}






만들일이 생겨서... 그냥 올려봄 =)