2014-03-26 50 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

您應該縮進您的代碼。這是完全不可讀的。 –

+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); 
} 

例如printf("%d ",A[i][R]);替換爲print(A[i][R]);

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