되는대로 살자

[C언어 기출문제&풀이] V 출력 본문

2009~2014/C/C++

[C언어 기출문제&풀이] V 출력

malu 2011. 5. 6. 22:47
아... 이 문제는 소스코드에서 중간에 고칠 게 좀 많지만.... 지금 피곤하고 할게 너무 많기 때문에 생각만 해두고 넘어가야겠다.....
프로그램 명: bui
제한시간: 1 초

V 를 출력하는 문제이다.

n 에 대한 V 는 아래와 같이 출력되어야 한다.

 **<--------n------>** 
*  *               *  *
 *  *             *  *
  *  *           *  *
   *  *         *  *
    *  *       *  *
     *  *     *  *
      *  *   *  *
       *  * *  *
        *  *  *
         *   *
          * *
           *

입력

80 이하의 자연수 n 이 주어진다.

출력

불 필요한 공백을 출력해서는 안되고 , 짝/홀수 출력은 입출력 예를 참고 한다.

입출력 예

입력

4

출력

 **    **
*  *  *  *
 *  **  *
  *    *
   *  *
    **

입력

3

출력

 **   **
*  * *  *
 *  *  *
  *   *
   * *
    *
출처:cjmp123
풀이
아.... 풀이라..... 그냥 거의 보고 그대로 적었는데 그나마
찾은 규칙을 적자면 첫 줄은 언제나 " **"+빈칸n개+"** " 
둘째줄 부터 줄이 다음줄로 넘어갈 때
1.중앙의 빈칸은 -2개씩 개수가 줄어들고 
2.앞의 빈칸은 1개씩 개수가 늘어나고 
3.중앙 빈칸이 좁혀져 별이 없어 진 다음 3줄을 더 출력한다 
뭐 이정도? 
#include <stdio.h>
int main()
{
 int i,j,n,k,t,t2;
 scanf("%d",&n);
 if(n%2==0) t=n/2;
 else t=(n+1)/2;
 printf(" **");
  for(i=0;i<n;i++)
   printf(" ");
  printf("**\n");
 
 for(i=0;i<t;i++)
 {
  for(j=0;j<i;j++)
   printf(" ");
  printf("*  *");
  for(k=0;k<n-2*(i+1);k++)
   printf(" ");
  
  if(i<t-1) printf("*  *");
  else if(n%2==0)
   printf("*  *");
  else
   printf("  *");
  printf("\n");
 }
 t=i;
 if(n%2==0) t2=4;
 else t2=3;
 for(j=0;j<3;j++)
 {
  for(i=0;i<t+j;i++)
   printf(" ");
  printf("*");
  for(i=0;i<t2-j*2;i++)
   printf(" ");
  if(j<2)
   printf("*");
  if(j==2)
   if(n%2==0)
    printf("*");
  printf("\n");
 }
}
 
아.... 복사하고 나니까 완전 기네... 수정해야 되는데.... 나중에 꼭 해야ㅈㅣ
아 근데 이러면 또 까먹을거 같아