2014-03-26 2 views
0

이 프로그램은 모든 크기의 행렬을 나선형 순서로 인쇄하지만 문제는 출력 끝에 여분의 공간을 넣음으로써 처음에는 여분의 공간을 원하지 않는다는 것입니다. 각 코드 안에 플래그가 삽입되어 처음 실행되는지 여부를 확인한 다음 적절하게 "% d"또는 "% d"를 사용할 수 있지만 큰 행렬의 경우 모든 if 블록이 두 번 이상 실행되고 대답은 첫 번째 실행에서 올바르게 간격을 띄운 다음 공간없이 모두 간격을 둡니다.끝에 여분의 공백을 제거하거나 시작

#include<stdio.h> 
int main() 
{ 
    int m,n; 
    int A[20][20],T,B,L,R,j,i,dir=0; 
    scanf("%d%d",&m,&n); 
    T=0;B=m-1;L=0;R=n-1; 
    //inpu array 
    for(i=0;i<m;i++) 
     { 
      for(j=0;j<n;j++) 
       { 
        scanf("%d",&A[i][j]); 
       } 
     } 

    while(T<=B && L<=R) 
     { 
      //right move 
      if(dir==0) 
       { 
        for(i=L;i<=R;i++) 
         { 
          printf("%d ",A[T][i]); 
         } 
        T++; 
        dir=1; 
       } 
      //down move 
      if(dir==1) 
       { 
        for(i=T;i<=B;i++) 
         { 
          printf("%d ",A[i][R]); 
         } 
        R--; 
        dir=2; 
       } 
      //left move 
      if(dir==2) 
       { 
        for(i=R;i>=L;i--) 
         { 
          printf("%d ",A[B][i]); 
         } 
        B--; 
        dir=3; 
       } 
      //top move 
      if(dir==3) 
       { 
        for(i=B;i>=T;i--) 
         { 
          printf("%d ",A[i][L]); 
         } 
        L++; 
        dir=0; 
       } 
     } 
    return 0; 
} 
+0

로 대체 printf("%d ",A[i][R]); 당신은 당신의 코드를 들여 쓰기를해야한다. 그것은 완전히 읽을 수 없습니다. –

+1

메모리에 문자열을 만든 다음 불필요한 공백을 제거하고 "즉시"인쇄하는 대신 불필요한 공백을 제거한 다음 인쇄하십시오. – Ryzhehvost

답변

0

대신 각 요소를 인쇄 한 후 공간을 추가로, 첫 번째 요소를 제외하고, 각 요소 전에 공간을 추가, 반대를 할 수 있습니다. 이처럼 :

for (int i = 0; i < count; ++i) { 
    if (i > 0) printf(" "); 
    printf("%d", data[i]); 
} 
-1
int print_status = 0; 

void print(int v){ 
    if(print_status) 
     printf(" %d", v); 
    else 
     print_status = printf("%d", v); 
} 

예를 들어, print(A[i][R]);

1
printf("%d", data[0]); 
for (int i=1; i < count; i++) { 
    printf(" %d", data[i]); 
} 
관련 문제