다중 for문을 이용. 탑의 높이(n)을 받아서 받은만큼의 탑모양을 별(*)로 찍기.

 

ex )

 

n=3  n=5  n=10


 

 

방법 1)

i가 1~n까지 반복한다고 했을 때,for(i=1; i<=n; i++)

각 줄의 공백( )의 개수는 n-i개이고 for(j=1; j<=n-i; j++)

공백이 찍힌 뒤에 찍히는 별의 개수는i*2-1개 for(j=1; j<=i*2-1; j++)
 인 점을 이용.

:맨 처음 문제를 봤을 때 가장 먼저 떠오른 방법입니다.

 

#include

void main(){
 int i,j,n;
 cout << "N = ";
 cin >> n;
 for(i=1; i<=n; i++){
  for(j=1; j<=n-i; j++)
   cout << " ";
  for(j=1; j<=i*2-1; j++)
   cout << "*";
  cout << "\n";
 }
}

 

 

 

 

방법 2)

i가 2*n-1 까지 2만큼 증가하면서 반복. for(i=1; i<=2*n-1; i+=2) --> 2 만큼 증가하기 때문에 n만큼의 줄을 만들 수 있다.

위 방법으로 반복한다고 할 때,

공백( )의 개수는 2*n-i를 2로 나눈 몫만큼for(j=1; j<=(2*n-i)/2; j++),

별(*)의 개수는 항상 i의 값만큼(2*n-1)인 것을 이용.for(j=1; j<=i; j++)

 

#include

void main(){
 int i,j,n;
 cout << "N = ";
 cin >> n;
 for(i=1; i<=2*n-1; i+=2){
  for(j=1; j<=(2*n-i)/2; j++)
  cout << " ";
  
  for(j=1; j<=i; j++)
   cout << "*";
  cout << "\n";
 }
}

 

 

 

방법 3)for문 안에 if문 사용.

i가 n부터 1씩 줄어들면서 1에 도달할 때까지 반복 --> 반복 횟수는 위의 방법들과 같음.for(i=n; i>=1; i--)

각 줄에서 모든 출력이 끝나는 점이 2*n-i인 점을 이용해서 반복문을 한번 더 써줌. for(j=1; j<=2*n-i; j++)

i가 n부터 1씩 줄어들면서 1에 도달할 때까지 반복할 때, 공백( )은 항상j가 i보다 작을 때 찍힘.if(j

j가 i보다 크거나 같을 때(공백을 다 찍은 후) *을 찍음.   --> 모든 출력이 끝나는 점이 2*n-i인 점을 고려해서 반복문을 한번 더 써줬기 때문에 공백을 찍고 남은 부분 모두 *을 찍으면 원하는 *의 갯수가 나온다. else cout << "*"

 

#include

void main(){
 int i,j,n;
 cout << "N = ";
 cin >> n;
 for(i=n; i>=1; i--){
  for(j=1; j<=2*n-i; j++){
   if(j
   else cout << "*";
  }
  cout << "\n";
 }
}

 

 

 

참고 - <역삼각형 만들기>

 

ex)

n=3 n=5  n=10




i가 n에서 1씩 감소하면서 1까지 갈 때까지 반복한다고 할때, for(i=n; i>=1; i--)
공백( )의 개수는 (n-i)개 for(j=1; j<=n-i; j++)
*의 개수는 (2*i-1)개 for(j=1; j<=2*i-1; j++)

인 규칙을 이용.

 

#include

void main(){
 int i,j,n;
 cout<<"N = ";
 cin>>n;
 for(i=n; i>=1; i--){
  for(j=1; j<=n-i; j++)
   cout << " ";
  for(j=1; j<=2*i-1; j++)
   cout << "*";
  cout << "\n";
 }
}

 

 


'Programing > C' 카테고리의 다른 글

반복문  (0) 2016.11.30
재귀함수사용한 덧셈  (0) 2016.11.30
c 윤달 구하기, 윤달계산  (0) 2016.11.30
#undef , 전처리문  (0) 2016.11.30
짝수 합 홀수 합 구하기  (0) 2016.11.30

+ Recent posts