프로그램 개요
플로이드 삼각형(Floyd's Triangle)은 자연수를 직각삼각형 형태로 배열한 구조로, 컴퓨터 과학 교육에서 반복문 학습용으로 널리 활용됩니다. 유명한 컴퓨터 과학자인 로버트 플로이드(Robert Floyd)의 이름을 따서 명명되었으며, 왼쪽 상단 모서리부터 1로 시작해 각 행마다 연속된 숫자를 채워 나가는 방식으로 정의됩니다.
1 15 14 13 12 11 2 3 10 9 8 7 4 5 6 6 5 4 7 8 9 10 3 2 11 12 13 14 15 1 플로이드 삼각형 역방향 플로이드 삼각형
알고리즘
플로이드 삼각형 출력 절차
1. 출력할 행의 개수를 입력받는다. 2. 첫 번째 행에는 값 1을 출력한다. 3. 두 번째 행에는 두 개의 값 2와 3을 출력한다. 4. 세 번째 행에는 세 개의 값 4, 5, 6을 출력한다. 5. 지정한 행의 개수만큼 위 과정을 반복한다.
역방향 플로이드 삼각형 출력 절차
1. 출력할 행의 개수를 입력받는다. 2. 가장 큰 숫자부터 시작해 각 행의 숫자 개수에 맞춰 값을 내림차순으로 배치하며 출력한다.
예제 코드
/* 역방향 플로이드 삼각형 출력 프로그램 */
#include<stdio.h>
int main() {
int r,c=1;
int rows,revrows,r1,c1,d;
clrscr();
printf("Enter number of rows to print the Floyd's Triangle: ");
scanf("%d", &rows);
printf("\n");
/* 정방향 플로이드 삼각형 출력 */
for (r=1;r<=(rows*(rows+1))/2;r++){
printf("%d ",r);
if(r==(c*(c+1))/2){
printf("\n");
c++;
}
}
printf("\n\n");
/* 역방향 플로이드 삼각형 출력 */
printf("Enter number of rows to print the reverse of Floyd's Triangle: ");
scanf("%d",&revrows);
printf("\n\n");
printf("Reverse of Floyd's Triangle\n");
printf("\n\n");
d = (revrows*(revrows+1))/2;
for(r1=revrows;r1>=1;r1--){
for(c1=r1;c1>=1;c1--,d--){
printf("%4d", d);
}
printf("\n");
}
getch();
return 0;
}코드 설명
정방향 출력 부분: 변수 r이 1부터 n*(n+1)/2(전체 숫자 개수)까지 증가하면서 숫자를 하나씩 출력합니다. 이때 r이 삼각수 공식 c*(c+1)/2와 일치하면 해당 행이 끝난 것이므로 줄을 바꾸고 행 카운터 c를 1 증가시킵니다.
역방향 출력 부분: 변수 d를 마지막 숫자인 n*(n+1)/2로 초기화한 뒤, 바깥쪽 반복문은 첫 번째 행(숫자가 가장 많은 행)부터 마지막 행까지 진행하고, 안쪽 반복문에서는 해당 행의 숫자 개수만큼 d를 1씩 감소시키며 출력합니다. %4d 서식 지정자를 사용해 숫자 폭을 맞추면 삼각형 모양이 깔끔하게 정렬됩니다.
실행 결과
프로그램을 실행하면 먼저 행의 개수를 입력받아 정방향 플로이드 삼각형을 화면에 출력하고, 이어서 다시 행의 개수를 입력받아 가장 큰 숫자부터 시작하는 역방향 플로이드 삼각형을 출력합니다. 예를 들어 5를 입력하면 위 그림과 같이 1부터 15까지의 숫자가 삼각형 형태로 배치된 결과를 확인할 수 있습니다.