줄 수가 주어지면 프로그램은 최소한의 복잡성으로 대칭 이중 삼각형 패턴을 인쇄해야 합니다.
예시
Input: 5 Output: X X O X O X X O X O X X O X O X X
전체 문제는 3개의 다른 파티션을 포함합니다 -
-
홀수 n의 경우 n-1줄, 짝수 n의 경우 n-2줄로 위쪽 절반을 인쇄합니다.
-
홀수 n은 1줄, 짝수 n은 3줄로 가운데 줄을 인쇄합니다.
-
홀수 n의 경우 n-1줄 또는 짝수 n의 경우 n-2줄로 아래쪽 절반 인쇄
알고리즘
START STEP 1: IF (n % 2 == 0) then x = x - 1; Define p as n – 1 for spaces Define s = 1 for characters STEP 2: LOOP FOR i= 1 AND i <= (x - 1) / 2 AND i++ LOOP FOR j = 1 AND j <= p AND j++ PRINT SPACE END LOOP IF i % 2 != 0 then GOTO STEP 11 Printx(s) ELSE GOTO STEP 12 Printo(s) END PRINT NEW LINE INCREMENT p BY 1 LOOP FOR j = 1 AND j <= p AND j++ PRINT SPACE END LOOP IF i % 2 != 0 then, GOTO STEP 11 Printx(s) ELSE GOTO STEP 12 Printo(s) END IF PRINT NEWLINE DECREMENT p BY 1 INCREMENT s BY 1 END LOOP STEP 3: IF n % 2 == 0 { LOOP FOR i = 1 AND i <= p AND i++ PRINT SPACE IF n % 4 != 0 then, GOTO STEP 11 Printx(n/2) ELSE GOTO STEP 12 Printo(n/2) END IF PRINT SPACE END IF STEP 4: IF n % 2 != 0 then, GOTO STEP ELSE IF n % 4 != 0 then, DIVIDE n BY 2 AND GOTO STEP 11 Printx(n/2) and Printx(n/2) ELSE DIVIDE n BY 2 AND GOTO STEP 11 Printx(n/2) and Printo(n/2) DIVIDE n BY 2 AND GOTO STEP END IF END IF PRINT NEW LINE STEP 5: IF n % 2 == 0 then, { PRINT SPACE DIVIDE n BY 2 AND GOTO STEP 11 Printx(n/2) PRINT NEWLINE END IF STEP 6: SET p = 1 STEP 7: IF n % 2 == 0 DECREMENT x BY 1 SET p = 2 END IF STEP 8: SET q = x / 2 STEP 9: LOOP FOR i = 1 AND i <= x AND i++) { LOOP FOR j = 1 AND j <= p AND j++ PRINT SPACE END FOR PASS q TO STEP 11 Printx(q) IF i % 2 == 0 THEN DECREMENT q BY 1 END IF PRINT NEWLINE INCREMENT p BY 1 END FOR STEP 10: PRINT NEWLINE STEP 11: Printx(n) LOOP FOR i = 1 AND i< = n AND i++ IF i % 2 != 0 then, PRINT x ELSE PRINT o END IF END FOR STEP 12: Printo(n) LOOP FOR i = 1 AND i< = n AND i++ IF i % 2 != 0 then, PRINT o ELSE PRINT x STOP
예시
#include <stdio.h> // printing alternate x o starting with x int printx(int n) { int i; for ( i = 1; i < = n; i++) { if (i % 2! = 0) printf("x "); else printf("o "); } return 0; } // printing alternate x o starting with o int printo(int n) { int i; for ( i = 1; i < = n; i++) { if (i % 2! = 0) printf("o "); else printf("x "); } return 0; } // To print the pattern for n int printpattern(int n) { // upper half // n-1 lines for odd, n-2 lines for even int x = n; int i, j; if (n % 2 == 0) x = x - 1; // number of spaces to leave in each line int p = n - 1; // number of characters in each line int s = 1; // prints double lines in each iteration for ( i = 1; i < = (x - 1) / 2; i++) { for ( j = 1; j < = p; j++) { printf(" "); } if (i % 2! = 0) printx(s); else printo(s); printf("\n"); p++; for ( j = 1; j < = p; j++) printf(" "); if (i % 2! = 0) printx(s); else printo(s); printf("\n"); p--; s++; } // extra upper middle for even if (n % 2 == 0) { for ( i = 1; i < = p; i++) printf(" "); if (n % 4! = 0) printx(n / 2); else printo(n / 2); printf("\n"); } // middle line if (n % 2! = 0) printx(n); else { if (n % 4! = 0) { printx(n / 2); printx(n / 2); } else { printx(n / 2); printo(n / 2); } } printf("\n"); // extra lower middle for even if (n % 2 == 0) { printf(" "); printx(n / 2); printf("\n"); } // lower half p = 1; if (n % 2 == 0) { x--; p = 2; } int q = x / 2; // one line for each iteration for ( i = 1; i < = x; i++) { for (int j = 1; j < = p; j++) printf(" "); printx(q); if (i % 2 == 0) q--; printf("\n"); p++; } printf("\n"); return 1; } int main() { int n = 5; printpattern(n); return 0; }
출력
위의 프로그램을 실행하면 다음과 같은 출력이 생성됩니다.
X X O X O X X O X O X X O X O X X