Advertisement
RedWarden

c언어과제2

Nov 14th, 2018
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.81 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.     int size = 0;
  5.     int space = 0;
  6.     int star = 1;
  7.     int isUp = 1;
  8.     int line = 0;
  9.     //단순화를 위해 짝수에서만 사용.
  10.     int lineSize = 0;
  11.     printf("양의 정수를 입력하세요. ");
  12.     scanf("%d", &size);
  13.     if (size % 2 == 1) {
  14.         //홀수진입
  15.         space = (size + 3) / 2;
  16.         while(1) {
  17.             for (int i = 0; i < space; i++) {
  18.                 printf(" ");
  19.             }
  20.             for (int i = 0; i < star; i++) {
  21.                 printf("*");
  22.             }
  23.             for (int i = 0; i < space; i++) {
  24.                 printf(" ");
  25.             }
  26.             printf("\n");
  27.             if (star == size) {
  28.                 isUp = 0;
  29.             }
  30.             if (isUp) {
  31.                 //상단부
  32.                 space--;
  33.                 star += 2;
  34.             }
  35.             else {
  36.                 //하단부
  37.                 space++;
  38.                 star -= 2;
  39.             }
  40.             if (star <= 0) {
  41.                 break;
  42.             }
  43.         }
  44.            
  45.     }
  46.     else {
  47.         //짝수진입
  48.         //1번째 라인 배제
  49.         lineSize = size + 4;
  50.         space = size / 2 + 2;
  51.         for (int i = 0; i < space; i++) {
  52.             printf(" ");
  53.         }
  54.         for (int i = 0; i < star; i++) {
  55.             printf("*");
  56.         }
  57.         for (int i = 0; i < (lineSize - space - star); i++) {
  58.             printf(" ");
  59.         }
  60.         printf("\n");
  61.         star++;
  62.         space--;
  63.         while(1) {
  64.             for (int i = 0; i < space; i++) {
  65.                 printf(" ");
  66.             }
  67.             for (int i = 0; i < star; i++) {
  68.                 printf("*");
  69.             }
  70.             for (int i = 0; i < (lineSize - space - star); i++) {
  71.                 printf(" ");
  72.             }
  73.             printf("\n");
  74.             if (star == size) {
  75.                 isUp = 0;
  76.             }
  77.             if (isUp) {
  78.                 //상단부
  79.                 space--;
  80.                 star += 2;
  81.             } else {
  82.                 //하단부
  83.                 if (star == 2) {
  84.                     break;
  85.                 }
  86.                 space++;
  87.                 star -= 2;
  88.             }
  89.         }
  90.         //마지막 줄 예외
  91.         star--;
  92.         for (int i = 0; i < space; i++) {
  93.             printf(" ");
  94.         }
  95.         for (int i = 0; i < star; i++) {
  96.             printf("*");
  97.         }
  98.         for (int i = 0; i < (lineSize - space - star); i++) {
  99.             printf(" ");
  100.         }
  101.         printf("\n");
  102.     }
  103.    
  104.    
  105.  
  106.     return 0;
  107. }
  108.  
  109. /*
  110. n=8
  111. ______*_____        6/1/5
  112. _____**_____        5/2/5          
  113. ____****____        4/4/4
  114. ___******___        3/6/3
  115. __********__        2/8/2          
  116. ___******___        3/6/3
  117. ____****____        4/4/4
  118. _____**_____        5/2/5
  119. _____*______        5/1/6  
  120.  
  121. n=7
  122. _____*_____     5/1/5
  123. ____***____     4/3/4
  124. ___*****___     3/5/3
  125. __*******__     2/7/2
  126. ___*****___     3/5/3
  127. ____***____     4/3/4
  128. _____*_____     5/1/5
  129.  
  130. n=6
  131. _____*____      5/1/4          
  132. ____**____      4/2/4
  133. ___****___      3/4/3
  134. __******__      2/6/2          
  135. ___****___      3/4/3
  136. ____**____      4/2/4
  137. ____*_____      4/1/5
  138.  
  139. n=5
  140. ____*____       4/1/4
  141. ___***___       3/3/3
  142. __*****__       2/5/2
  143. ___***___       3/3/3
  144. ____*____       4/1/4
  145.  
  146. n=4
  147. ____*___        4/1/3          
  148. ___**___        3/2/3
  149. __****__        2/4/2
  150. ___**___        3/2/3
  151. ___*____        3/1/4
  152.  
  153. n=3
  154. ___*___         3/1/3          
  155. __***__         2/3/2
  156. ___*___         3/1/3
  157.  
  158. n=2
  159. ___*___         3/1/3
  160. __**___         2/2/3
  161. __*____         2/1/4
  162.  
  163. _________________________________
  164.  
  165. n=1
  166. __*__           2/1/2
  167.  
  168.  
  169. 모두 메인 위치에선
  170. 2/n/2를 취함
  171. 즉 최대값은 n+4
  172.  
  173. n이 홀수:
  174. 메인 계산 : (메인 + 1) / 2
  175.  
  176.  
  177.  
  178. (n+3) / 2 / 1 / (n+3) / 2
  179.  
  180. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement