읽고 말하기 수열, 일명 '개미수열'.
이번에는 개미수열 코딩을 알아가보도록 하겠다.
개미수열은 베르나르 베르베르의 소설 '개미'에서 등장해 유명해진 수열이다.
우선 개미수열이 어떤 것인지 간단히 짚고 넘어가자.
전개 과정은 다음과 같다.
1. a[i]를 b[j]에 복사한다.
2. a[i+1] = a[i] 이면 b[j+1] += 1, 아니라면 j+2로 넘어간다.
즉 결과물은 위와 같다.
1
1 1 : 첫번째 줄을 보면 1이 1개이다.
1 2 : 두번째 줄을 보면 1이 2개이다.
1 1 2 1 : 세번째 줄을 보면 1이 1개, 2가 1개이다.
1 2 2 1 1 1 : 네번째 줄을 보면 1이 2개 2가 1개 1이 1개이다.
.
.
.
이렇게 반복해 전개해 나간다.
네이버 지식백과에서 조금 자세하게 설명되어 있다.
링크 : http://terms.naver.com/entry.nhn?docId=3568985&cid=58944&categoryId=58970
위의 전개 과정을 모듈로 만들어 적재적소에 넣으면 된다.
그럼 코드는 다음과 같다.
#include<stdio.h>
void main() {
int a[100] = { 0, };
int b[100] = { 0, };
int n, count, l, i, k; //count는 숫자가 중복되는 횟수
a[0] = 1; //처음은 1로 시작
printf("Enter : ");
scanf("%d", &n);
printf("%3d\n", a[0]);
for (int m = 1; m < n; m += 1) {
i = 0;
l = 0;
count = 1;
while (a[i] != 0) {
if (a[i + 1] == a[i]) {
count += 1;
}
else {
b[l] = a[i];
printf("%3d", b[l]);
l += 1;
b[l] = count;
printf("%3d", b[l]);
l += 1;
count = 1;
}
i += 1;
}
for (k = 1; k < 100; k += 1) { //배열 복사 모듈
a[k] = b[k];
b[k] = 0;
}
printf("\n");
}
return 0;
}
자잘한 설명들은 코드를 보면서 생각하면 해결 될 것이라고 생각한다.
'Programming > C 언어' 카테고리의 다른 글
C언어 기초 1 - C언어 소개 및 출력하기 (0) | 2018.05.23 |
---|---|
C언어 - 파스칼의 삼각형 Pascal's Triangle (1) | 2017.09.19 |
C언어 - 마방진 (0) | 2017.09.07 |
C 언어 programming 예제 - 두번째 과제 (0) | 2017.08.22 |
C 언어 programming 예제 - 첫번째 과제 (0) | 2017.08.21 |