2013-10-22 6 views
1

나는 C++ 클래스 용 프로그램을 디자인하고 있는데 교수는 "*"를 사용하여 다이아몬드 모양을 출력하는 프로그램을 만들고 싶어합니다. 내가 갇혀있는 것은 프로그램이 너무 많은 라인을 출력하고 있다는 것입니다. 대신 어떻게이 작동하도록하려면 코드를 수정하는 것루프가 너무 자주 실행되는 이유는 무엇입니까?

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

를 출력한다

* 
*** 
* 

? 나는 운이없는 아침 내내 온라인으로 대답을 찾고있다.

#include <iostream> 
using namespace std; 

int main() { 
    //Define Varaible 
    int N; 

    cout << "Please enter a postitive integer: "; 
    cin >> N; 
    cout << "Here is your diamond." << endl << endl; 

    for (int i = 0; i <= 2 * N; i++) { 
     for (int j = 0; j <= 2 * N; j++) { 
     if (i <= N) { 
      if (j < N - i || j > N + i) { 
       cout << ' '; 
      } 
      else { 
       cout << '*'; 
      } 
     } 
     else { 
      if (j < i - N || j > 3 * N - i) { 
       cout << ' '; 
      } 
      else { 
       cout << '*'; 
      } 
     } 
     } 
     cout << endl; 
    } 
    return 0; 
} 
+0

입력을 통해 "잘못된"이미지를 얻을 수 있습니까? 1 행이 너무 많아서 자신의 코드 (...?)를 이해하지 못하면 "N = N-1;"을 추가하십시오. 어딘가에. – usr2564301

답변

0

당신은 당신이 예상 한 것보다 더 많은 행을받을 이유는 당신이 실제로 2 * N - 1을 할 때, 행 2 * N + 1 수를 만드는 것입니다 :

여기 내 코드입니다.

해결 방법은 간단합니다. 입력을 읽은 후 N을 하나 씩 감소시킵니다.

cin >> N; 
    assert(N > 0); 
    --N; 

이렇게하면 나머지 코드는 변경하지 않아도됩니다.

0

당신은 범위에있는 것을 기억해야한다 [0,5] (모두 포함) 6 개 요소,하지가 있습니다 5. 그래서 당신은 루프를하고 당신은 5 반복을 수행 할 때 보통 수행 중 하나

for(int i = 0; i < 5; ++i) // do stuff 

또는

for(int i = 1; i <= 5; ++i) // do stuff 

C로 프로그래밍 또는 C++ 첫 번째 버전은이 배열의 인덱스를 맞는 프로그래머가 양식을 사용하는 습관을 가지고 더 자주 사용된다. 나는 당신이 할 경우 이전에 말했듯이 그러나 :

for(int i = 0; i <= 5; ++i) // do stuff 

6 반복 될 것이라고.

관련 문제