2014-11-06 6 views
-1

그래서 "w"를 묻는 코드를 입력 할 과제가 있습니다. 숫자를 입력하면 2w 인 대각선으로 마름모를 만듭니다. 마름모는 간격과 *로 만들어야합니다. 내가 할마름모 그리기 코드 작성 문제

/a.out 
w: 5 
    * 
    * * 
    * * * 
    * * * * 
* * * * * 
* * * * * * 
* * * * * 
    * * * * 
    * * * 
    * * 
    * 

: 지금 직면하고있는 문제는 내가 대각선 5는 = 승 입력 할 때 5 대신 (10) ....

main() 
{ 
int w; 
int i; 
int j; 

printf("w: "); 
scanf("%d", &w); 
printf(""); 

i = 0; 
while (w >= i) 
{ 
    for (j = 0; j < (w - i); j++) 
     printf(" "); 
    for (j = 0; j < i + 1; j++) { 
     printf("*"); 
     if (j <= i) { 
      printf(" "); 
     } 
    } 
    printf("\n"); 
    i = i + 1; 
} 
i = w - 1; 
while (i >= 0) 
{ 
    for (j = 0; j < (w - i); j++) 
     printf(" "); 
    for (j = 0; j < i + 1; j++) { 
     printf("*"); 
     if (j <= i) { 
      printf(" "); 
     } 
    } 
    printf("\n"); 
    i = i - 1; 
} 
return 0; 
} 
+0

'w '가 필요한 것의 절반이라면 코드에서'w'의 값을 두배로하여 사용하십시오. – StarPilot

+0

감사합니다 !!! :) – Juginator

답변

2

줄을 추가하면 w = 2 * (w-1) + 1; 어떤 루프가 나오기 전에 정확한 숫자를 출력 할 수 있습니다. (그냥 입력 패턴을 얻고 수정 한 패턴을 찾았습니다)

하나의 루프로도이 문제를 해결할 수 있습니다!

편집 : 죽이는데했다

#include <stdio.h> 
#include <math.h> 

#define min(a, b) (((a) < (b)) ? (a) : (b)) 
int main(){ 

    int input, row, column; 

    printf("input a number: "); 
    scanf("%d", &input); 
    printf(""); 

    input = 2*(input-1) + 1; 
    int pivot = input; 
    int total_spaces = input*2+1; 
    for(row = 0; row < total_spaces; row++){ 
     for(column = 0; column < total_spaces; column ++){ 
      if(min(abs(total_spaces - row -1),abs(0 - row)) + 
        min(abs(total_spaces - column -1),abs(0 - column)) 
         >= input && (row%2 != column %2)){ 
       printf("*"); 
      } 
      else printf(" "); 
     } 
     printf("\n"); 
    } 
} 

!

-1

나는 당신의 프로그램을 실행하고 나는이 있었다이다 네 대각선이 어디 있는지 보지 마라. 5. 더 구체적으로 할 수 있니?

나는 또한 이것이 당신에게 중요하지 않을 수 있음을 이해하지만 귀하의 코드는 컴파일되지 않습니다. 적어도 주 기능 전에 int을 추가하십시오.

+0

당신이 입력하는 숫자 "w"는 대각선의 1/2입니다. 예를 들어 w = 10이면 마름모꼴은 다음과 같아야합니다 : [link] (http://i.imgur.com/EBCgSBj.jpg)) – Juginator

+0

@nsierra, 가장 왼쪽 별에서부터 계산합니다. 수평 마름모 대각선을 따라 오른쪽에있는 다음 별은 1의 거리에 있습니다. 가장 오른쪽 별에 계속 계산하면 5의 거리에 도달합니다. 혼란 스럽습니까? * 얼마나 많은 울타리 패널과 * * 얼마나 많은 울타리 포스트 *? –