正文

矩阵蛇形填数2007-08-18 22:59:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/progfan/28645.html

分享到:

/* 6. 矩阵中填数. 当给出 N*N 的矩阵,要求用程序填入下列形式的数:   ① 倒填,例如N=5             ② 蛇形填数              ③ 回转填数 ┌─┬─┬─┬─┬─┐   ┌─┬─┬─┬─┬─┐   ┌─┬─┬─┬─┬─┐ │25│24│23│22│21│   │ 1│ 3│ 4│10│11│   │ 1│16│15│14│13│ ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤ │20│19│18│17│16│   │ 2│ 5│ 9│12│19│   │ 2│17│24│23│12│ ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤ │15│14│13│12│11│   │ 6│ 8│13│18│20│   │ 3│18│25│22│11│ ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤ │10│ 9│ 8│ 7│ 6│   │ 7│14│17│21│24│   │ 4│19│20│21│10│ ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤   ├─┼─┼─┼─┼─┤ │ 5│ 4│ 3│ 2│ 1│   │15│16│22│23│25│   │ 5│ 6│ 7│ 8│ 9│ └─┴─┴─┴─┴─┘   └─┴─┴─┴─┴─┘   └─┴─┴─┴─┴─┘ 以下为蛇形填数的答案*/#include <stdio.h>int main(void){  int i,  //行变量      j,   //列变量      n,  //矩阵行数      cs, //从左上角(或右下角)开始到当前元素所在位置的三角形层数      z,  //当前数值      c;  //差值  char fx,  //数值增大的方向       zy;   //数值在左下角和右上角形成的对角中分线的左右位置,左三角形含中分线元素  printf("请输入矩阵的行数:");  scanf("%d",&n);  for(i=1;i<=n;i++){     for(j=1;j<=n;j++){           if(i+j<=n+1) zy='z'; //数值在左上角           else zy='y';              //数值在右下角        cs=i+j-1;                     //从左上角开始到当前元素所在位置的三角形层数        if(cs%2==1) fx='l';     //数值向左下方增大        else fx=1;                   //数值向右上方增大        if(zy=='z'){           z=(1+(cs-1))*(cs-1)/2+1; //当前元素所在层的最小值           if(fx=='l') c=i-1;      //数值向左下方增加时,当前元素与最大值的差值为i-1           else c=j-1;               //数值向右上方增加时,当前元素与最大值的差值为j-1           z+=c;                      //当前值=最大值-差值        }        else{                                   //以下从右下角开始计算三角形           cs=(2*n-1)-(cs-1);  //从右下角反算当前元素距右下角的层数,其奇偶性不变           z=n*n-(1+cs)*cs/2+1;    //当前层的最小数           if(fx=='l') c=n-j;              //当前元素距当前层最小元素的差值           else c=n-i;                       //同上           z+=c;        }        printf("%4d",z);        if(j==n) printf("\n");     }  }  return 0;}

阅读(31) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册