博文

[置顶] 精巧的打印漩涡状字符的代码(2007-03-28 21:43:00)

摘要:题目: 打印一个 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维方阵转化为一维来处理。                    ......

阅读全文(2673) | 评论:0

拉丁方阵(2007-03-28 21:54:00)

摘要:拉丁方阵 据说普鲁士的腓特列大帝曾组成一支仪仗队,仪仗队共有36名军官,来自6支部队,每支部队中,上校、中校、少校、上尉、中尉、少尉各一名。他希望这36名军官排成6×6的方阵,方阵的每一行,每一列的6名军官来自不同的部队并且军衔各不相同。令他恼火的是,无论怎么绞尽脑汁也排不成。后来,他去求教瑞士著名的大数学家欧拉。欧拉发现这是一个不可能完成的任务。来自n个部队的n种军衔的n×n名军官,如果能排成一个正方形,每一行,每一列的n名军官来自不同的部队并且军衔各不相同,那么就称这个方阵叫拉丁方阵。欧拉猜测在n=2,6,10,14,18,…时,拉丁方阵不存在。然而到了上世纪60年代,人们用计算机造出了n=10的拉丁方阵,推翻了欧拉的猜测。现在已经知道,除了n=2,6以外,其余的拉丁方阵都存在,而且有多种构造的方法。请你造一个n=4的拉丁方阵。如果你有扑克牌,请用四种花色(梅花,方块,红心,黑桃)的1(即A)、2、3、4共16张牌,将它们排成4×4的方阵,每一行,每一列四种花色俱全,并且都有1、2、3、4。仔细欣赏一下,除了每行每列都有1、2、3、4,而且花色齐全。另外,这个图还有许多特点:1.  一条对角线(从左上到右下)上全是A,另一条对角线(从左上到右下)上是试4。2.  方块与梅花是左右对称的,红桃与黑桃也是左右对称的。就是说,如果沿中间的竖线将图对折,方块与梅花相合,红桃与黑桃相合。3.  方块与黑桃,梅花与红桃上下对称。就是说,如果沿中间的横线将图对折,方块和黑桃相合,梅花与红桃相合。4.  A与4,2与3左右对称。5.  A与4,2与3上下对称。6.  两条对角线上四种四种花色齐全。7.  方块与红桃中心对称,黑桃与梅花中心对称,就是说,如果将图形绕中心(图中横线与竖线的点)旋转180°,左上的方块与右下的红桃相合。上图是另一种4阶(n=4)的拉丁方阵,请同学们自己欣赏,发现一些规律和特点。学习数学,应当注意欣赏数学的美:整齐、对称、有规律、简单、自然、…。会欣赏数学的美才能将数学学的更好;学好了数学,也就提高了对数学美的认识。 ......

阅读全文(2206) | 评论:0