给二维数组排版

0     495     330     210     126     70     35     15     5     1     
495     495     330     210     126     70     35     15     5     1     
165     165     120     84     56     35     20     10     4     1     
45     45     36     28     21     15     10     6     3     1     
9     9     8     7     6     5     4     3     2     1     
1     1     1     1     1     1     1     1     1     1    

这样看很难受。

对于每一列, 算出其最大位数, 设为 x, 假设这一列的一个数的位数为 y, 那么将它后面的空格数设为 k=x+1-y, 就可以保证矩阵的每一列的数字都满足左对齐。

很naive且不实用, 但是我还是要发出来。

实现

int weishu(int x) {
  if(!x) return 1;
  int res=0;
  while(x) x/=10, ++res;
  return res;
}
int mx[N];
void print_matrix(int a[101][101] ,int n, int m) {
  for(int j=0;j<=m;++j)
    for(int i=0;i<=n;++i)
      mx[j] = max(mx[j], weishu(a[i][j]));
  for(int i=0;i<=n;++i) {
    for(int j=0;j<=m;++j) {
      cout<<a[i][j];
      for(int k=mx[j]+2-weishu(a[i][j]);k>=1;--k) putchar(' ');
    }
    putchar('
');
  }
}

效果:

0    495  330  210  126  70  35  15  5  1  
495  495  330  210  126  70  35  15  5  1  
165  165  120  84   56   35  20  10  4  1  
45   45   36   28   21   15  10  6   3  1  
9    9    8    7    6    5   4   3   2  1  
1    1    1    1    1    1   1   1   1  1  
原文地址:https://www.cnblogs.com/tztqwq/p/13624934.html