Chinaunix首页 | 论坛 | 博客
  • 博客访问: 648012
  • 博文数量: 205
  • 博客积分: 7891
  • 博客等级: 少将
  • 技术积分: 2168
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-29 13:16
文章分类

全部博文(205)

文章存档

2015年(4)

2014年(5)

2013年(1)

2012年(4)

2011年(51)

2010年(86)

2009年(45)

2008年(9)

分类: C/C++

2010-04-20 16:25:35

昨天一个朋友出了一个题,输入一个数字,打印一个矩阵
例如输入3,打印旋转矩阵:
    7 8 9
    6 1 2
    5 4 3
 
 
/*print array */
#include
/*to track the array*/
static int off=1,per_off=1,pn=1,two=2,iorj=0; //when i,iorj=1
void track(int* i,int* j)
{
 iorj?((*i)+=pn):((*j)+=pn);
 --per_off;
 if(per_off==0)
 {
  iorj=~iorj&0x1;
  per_off=off;
  --two;
  if(two==0)
  {
   ++off;
   per_off=off;
   pn*=-1;
   two=2;
  }
 }
 return;
}
void printa(int in,int a[][in])
{
 int i,j;
 
 for(i=0;i {
  for(j=0;j  {
   printf("%2d ",a[i][j]);
  }
  putchar('\n');
 }
 
 putchar('\n');
}
int main(void)
{
 int in;
 int count=1;
 puts("Input a num <10:");
 scanf("%d",&in);
 int a[in][in];
 int i,j;
 int n=0;
 for(i=0;i {
  for(j=0;j  {
   a[i][j]=++n;
  }
 }
 printa(in,a);
 n=1;
 //for(i=(in-1)/2,j=(in-1)/2;i!=(in%2==0?(in-1):0)&&j!=(in%2==0?0:(in-1));track(&i,&j))
 for(i=(in-1)/2,j=(in-1)/2;n!=in*in+1;track(&i,&j))
 {
#ifdef DEBUG
  printf("i=%d,j=%d,n\n",i,j,n);
#endif
  a[i][j]=n++;
 }
 printa(in,a);
 return 0;
}
小菜的程序,大家提提意见。
 
阅读(1509) | 评论(0) | 转发(0) |
0

上一篇:单内核与多内核

下一篇:参加BLUG社区活动

给主人留下些什么吧!~~