상세 컨텐츠

본문 제목

C 언어 예제, 개미 수열 만들기

컴퓨터 관련/C 언어 예제

by 열정과 함께 2014. 12. 31. 03:41

본문

어디선가 문제가 나왔다더라. 10분 안에 개미수열을 파이썬으로 짜라던가.


나는 파이썬은 잘 모르는데 사실 베르나르 베르베르의 소설 개미도 재미있게 읽었던 편이고, 수열 자체는 보면서 야, 이렇게 생각할 수도 있구나 싶었던 차라 C 언어로 한번 해보기로 했다.


모르는 사람을 위해 설명하면 이런 거다.


1 --> 일(1) 하나(1)

11 --> 일(1)  둘(2)

12  --> 일(1) 하나(1) 이(2) 하나(1)

1121 --> 일(1) 둘(2) 이(2) 하나(1) 일(1) 하나(1)

122111 --> ...


이런 식으로 쭉 이어지는 거다. 일견 보면 이거랑 같은 형식이라고 보면 된다.


aaaabbbbccddddddd

  --> a5b4c2d7


만들면 이렇게 된다.




사실 이 포스팅에 있는 코드대로 하면 오류가 난다. 왜 그런고 하니 중간에 결과 인쇄를 위한 배열이 있는데 그 배열 크기가 10글자라 수열의 총 글자 수가 10글자가 넘어가면 에러가 난다.


사실 이거 올리기 전 까지 수열 길이 더 길게 만들고 있었는데 그냥 편의상 10글자로 한거라..... 알아서 참고합시다. 배열 이름은 temp_arr 하고 arr 입니다. 거기서 글자 수만 수정하면 거 길게 나옴.


개념은 다음과 같다. 가령 예를 들어 수열 1121 이 있다고 한다면


11 2 1 의 세 마디로 나누어서 생각하는 것이다. 한 마디 입력하고, 한 마디 입력하고, 한 마디 입력하고. 


그리고 수열을 구하는 함수 안에서는 다시 그 함수가 호출되도록(재귀) 해서 다음 수열이 도출되게 만든다.




코드는 아래와 같다.


#include <stdio.h>

int ant_array(int *p, int *arr, int *temp_arr);

void print_arr(int *arr);

int main()

{

int i=0; 

int arr[10];

int temp_arr[10];

arr[0]=1;

printf("1 \n");

ant_array(&i, arr, temp_arr);

return 0;


}

int ant_array(int *p, int *arr, int *temp_arr)

{

int a, b,c,d;

a=1; b=0; c=0; d=0;

for(;;)

{

for(;;)

{

*temp_arr=*arr;

if(*arr==*(arr+1))

{

arr++;

a++; c++;

}

else

{

temp_arr++; d++;

*temp_arr=a;

temp_arr++; d++;

arr++; c++;

a=1;

break;

}

}

if(*arr<1 || *arr>9)

{

arr=arr-c;

c=0;

break;

}

}

temp_arr=temp_arr-d;

d=0;

for(b=0;b<10;b++)

{


if(temp_arr[b]>0 && temp_arr[b]<10)

{

arr[b]=temp_arr[b];

}

else

{

break;

}

}

*p=*p+1;

if(*p<10)

{

print_arr(arr);

ant_array(p, arr, temp_arr);

}

else

{

return 0;

}

}

void print_arr(int *arr)

{

int a;

for(a=0;a<10;a++)

{

if(arr[a]>0 && arr[a]<10)

{

printf("%d", arr[a]);

}

else

{

break;

}

}

printf("\n");

}




관련글 더보기

댓글 영역