题目: 打印一个 N*N 的方阵,N为每边字符的个数(3<N<20), 要求最外一层为"T", 第二层为"J", 从第三层起每层依次打印数字 1,2,3,... 解答: #include<iostream>#include<vector> using namespace std; // 求最小的数inline int min(int a,int b){ return ((a<b) ? a:b);}// 求四个数中较小的那个inline int MinOfFour(int a,int b,int c,int d){ return min(min(a,b),min(c,d));} void print(int n) //n为需要打印的方阵的行列数{ string str("TJ123456789"); int i,j; for(i =0;i!=n;i++) { for(j =0;j!=n;j++) { cout<<str[MinOfFour(i,j,n-i-1,n-j-1)]; } cout<<endl; }}void main(){ int n; cout<<"输入一个整数:"; cin>>n; print(n);} 此解法的精妙之处在于,掌握了图案的规律,将2维方阵转化为一维来处理。

评论