프로젝트/심심풀이
심심풀이 :: [C] 개미수열
appHunter
2009. 5. 6. 19:23
글을 다 날려서 다시 적는다. !! (2009-05-06에 날림)
2006/11/22 21:04 원본보기
2006/11/22 21:04 원본보기
개미수열을 짜 보았다.
개미수열을 모르시는 분은 -_-;
음...
베르나르 베르베르의 소설 .'개미'에 나오는 수열.
1
1 1
1 2
1 1 2 1
1 2 2 1 1 1
1 1 2 2 1 3
1 2 2 2 1 1 3 1
다음과 같은 법칙을 가진다 ^^;
개미수열을 모르시는 분은 -_-;
음...
베르나르 베르베르의 소설 .'개미'에 나오는 수열.
1
1 1
1 2
1 1 2 1
1 2 2 1 1 1
1 1 2 2 1 3
1 2 2 2 1 1 3 1
다음과 같은 법칙을 가진다 ^^;
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdlib.h>
#include<string.h>
static char temp[]={"1"}; // 임시 개미수열 저장 장소
char * ant="1"; // ant 개미 수열
char * ant_str, * ant_num;
void ant_fun();
int main()
{
int i =0;
int line;
ant = (char *)malloc(sizeof(temp)+1);
strcpy(ant,temp);
{
int i =0;
int line;
ant = (char *)malloc(sizeof(temp)+1);
strcpy(ant,temp);
scanf("%d",&line ); // 라인 수를 입력 받는다.
for(i = 0 ; i < line; i++) // 15줄 까지 출력 .
{
ant_fun();
printf("\t\t\tNUM = %d",i+1);
}
return 0;
}
{
ant_fun();
printf("\t\t\tNUM = %d",i+1);
}
return 0;
}
void ant_fun()
{
int num=1; // 각각의 수에 갯수
int i,j,n ; //for문을 사용하기 위해서
int len,len1,len2; // string 길이
len = strlen(ant);
// printf("\n %d",len);
ant_str = (char *)malloc(len+1);
ant_num = (char *)malloc(len+1);
{
int num=1; // 각각의 수에 갯수
int i,j,n ; //for문을 사용하기 위해서
int len,len1,len2; // string 길이
len = strlen(ant);
// printf("\n %d",len);
ant_str = (char *)malloc(len+1);
ant_num = (char *)malloc(len+1);
printf("\n");
for( i =0 , j = 0, n = 0 ; *(ant + i ) != '\0'; i++) // i가 \0 일때까지 for문 돌린다.
// for( i =0 , j = 0, n = 0 ; i < len; i++)
{
if( *(ant +i) == *(ant + i + 1) ) // 전과 후가 같으면 갯수 증가
{
num++;
}
else // 다르면 출력 , num 갯수 1로 초기화
{
printf("%c%d",*(ant +i) , num );
ant_str[j++] = *(ant+i) ; // 각각의 값을 temp 배열에 넣는다.
ant_num[n++] = num + '0' ; // 각가 숫자도 넣는다 .
num = 1;
}
}
ant_str[j] = '\0';
ant_num[n] = '\0';
// for( i =0 , j = 0, n = 0 ; i < len; i++)
{
if( *(ant +i) == *(ant + i + 1) ) // 전과 후가 같으면 갯수 증가
{
num++;
}
else // 다르면 출력 , num 갯수 1로 초기화
{
printf("%c%d",*(ant +i) , num );
ant_str[j++] = *(ant+i) ; // 각각의 값을 temp 배열에 넣는다.
ant_num[n++] = num + '0' ; // 각가 숫자도 넣는다 .
num = 1;
}
}
ant_str[j] = '\0';
ant_num[n] = '\0';
free(ant); // 메모리 해제한다
len1 = strlen(ant_str);
len2 = strlen(ant_num);
ant = (char *)malloc(len1+len2+1);
for(i =0,j=0 ; *(ant_str + i ) != '\0' ; i++)
{
ant[j++] = *(ant_str+i);
ant[j++] = *(ant_num+i);
}
len1 = strlen(ant_str);
len2 = strlen(ant_num);
ant = (char *)malloc(len1+len2+1);
for(i =0,j=0 ; *(ant_str + i ) != '\0' ; i++)
{
ant[j++] = *(ant_str+i);
ant[j++] = *(ant_num+i);
}
ant[j] = '\0'; // 문자열이기 때문에 젤 마지막에 \0 을 넣는다
free(ant_str);
free(ant_num);
}
free(ant_str);
free(ant_num);
}
포인터를 사용해서 개미수열을 코딩해 보았다.
약간은 원리(?) 를 이해하고 풀어야 했던 문제였다.
약간은 원리(?) 를 이해하고 풀어야 했던 문제였다.