2015-01-21 5 views
0

파스칼의 삼각형을 C++로 인쇄하는 프로그램에 도움이 필요합니다. 나는이처럼 보이도록 간격을 필요파스칼 삼각형 프로그램의 간격 C++

How many rows: 4 
      1 
      1  1 
     1  2  1 
    1  3  3  1 
1  4  6  4  1 

를 대신은 다음과 같습니다

Enter a number of rows: 4 
     1 
     1   1 
     1   2   1 
     1   3   3   1 
     1   4   6   4   1 

내 코드는 다음과 같습니다

#include <iostream> 
#include <iomanip> 
using namespace std; 

int combinations (int n, int k) { 
    if (k == 0 || k == n) { 
     return 1; 
    } 
    else { 
     return combinations(n-1,k-1) + combinations(n-1,k); 
    } 
} 

int main () { 
    int rows; 
    cout << "Enter a number of rows: "; 
    cin >> rows; 
    for(int r = 0; r < rows+1; r++) { 
     cout << "   " << "1"; 
     for(int c = 1; c < r+1; c++) { 

      cout << "   " << combinations(r, c) << ' '; 

     } 
     cout << endl; 
    } 
} 

누군가 나를 간격 권리를 얻을 도와 드릴까요? 주요 차이점은 당신이 일정하게 가지고 있지만 안 전면의 간격이처럼

+1

질문을하는 방식으로 특정 문제를 해결하기 위해 아무 것도 시도하지 않은 것처럼 보입니다. –

+0

나는 꽤 많은 것들을 시도했지만 어떻게 작동 시킬지 알 수 없었다. 예를 들어 << setw의 다양한 조합을 시도했습니다. – Kelton2

+0

나는 이것을 위해 과거에 다른 게시물을 위해 해결책을 썼다. 당신은 http://stackoverflow.com/questions/19898756/pascals-triangle-using-mainly-functions-in-c/ – Ares

답변

1

가 보이는 :

대신
cout << "   " << "1"; 

, 당신이 원하는 출력의 전면 공간의 수를 계산하는 경우, 매 행마다 3 씩 감소한다는 것을 알 수 있습니다. 그래서 :

for (int s = 0; s < 3 * (rows - r) + 1; ++s) { 
    cout << ' '; 
} 
cout << '1'; 

또는 단지 :

cout << std::string(3 * (rows - r) + 1, ' '); 

는 또한 각 요소를 인쇄하는 것은 올바르지 않습니다. 대신에 :

cout << "   " << combinations(r, c) << ' '; 

당신이 원하는 : (처음에 다섯 개 공간, 아니 끝에 공간) : 선명도

cout << "  " << combinations(r, c); 

또는 : 그

cout << std::string(5, ' ') << combinations(r, c); 

없음, 그러나 여러 자릿수 값을 처리 할 수 ​​있으므로 올바른 작업은 setw입니다.

cout << setw(3 * (rows - r) + 1) << '1'; 
// .. 
cout << setw(6) << combinations(r, c); 
+0

에서 그것을 확인할 수 있습니다. 거의 옳았습니다. (그리고 제가 실수를 한 곳을 봅니다.)하지만 여전히 그렇습니다. 왼쪽에 너무 많은 공간이 있습니다. setw를 추가하는 것만 큼 간단합니까? – Kelton2

+0

@ Kelton2 실제로'setw'는 더 좋을 것입니다. 여러 자리를 처리하기 때문입니다. 업데이트 됨. – Barry

+0

여전히 왼쪽에 너무 많은 장소가 있습니다. – Kelton2