类型:转载 责任编辑:asp 日期:2007/03/01
输入4
输出
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
输入5
输出
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
如何写出实现上述的程序?先谢了!!!!!!!!!!!!!
推荐阅读
#include "stdio.h"
void helix(int l,int n,int m);
int main(int argc, char* argv[])
{
printf("hello world!\n");
int i,n=10;
for(i=1;i<=n;i++)
{
helix(1,n,i);
printf("\n");
}
return 0;
}
void helix(int l,int n,int m)
{
int i;
if(m==1)
{
for(i=l;i<l+n;i++)
{
printf("%4d",i);
}
}
else if(m==n)
{
for(i=l+(n-1)*3;i>=l+(n-1)*2;i--)
{
printf("%4d",i);
}
}
else
{
printf("%4d",l+(n-1)*4-m+1);
if(n>2)
{
helix(l+(n-1)*4,n-2,m-1);
}
printf("%4d",l+n-1+m-1);
}
}
方法一:
可否设置一个4或5维的数组,每一次计算左上的数字,该数组保存上一行数据,以计算下一行数据。
方法二:
按照相应的规律利用文件指针定位写到一个.dat文件中去,最后依次输出,这样不存在循环的做法。
我们c语言考试考过这道题,最后一道,呵呵
哈哈,太容易了,花了半个小时,写了一个,已经试过了,好用的很呀!
#include "stdafx.h"
int * getmartrix(int sidelength)
{
if(sidelength<=0)
return 0;
int * pmartrix = new int[sidelength*sidelength],
* pint;
enum {top,right,bottom,left} side;
int length,step,i,j,value;
side = top;
length = sidelength;
step = 0;
i = j = 0;
value = 1;
pint = pmartrix;
for(;length !=0 ;)
{
pint[j * sidelength + i] = value++;
switch(side)
{
case top:
++step;
if(step >= length) //the end on right
{
side = right;
step = 0;
--length;
++j;
}else
++i;
break;
case right:
++step;
if(step >= length) //the end on bottom
{
side = bottom;
step = 0;
--i;
}else
++j;
break;
case bottom:
++step;
if(step >= length) //the end on left
{
side = left;
step = 0;
--length;
--j;
}else
--i;
break;
case left:
++step;
if(step >= length) //the end on bottom
{
side = top;
step = 0;
++i;
}else
--j;
break;
}
}
return pmartrix;
}
int main(int argc, char* argv[])
{
int * pmartrix = null,
* pint,
sidelength,
i,j;
for(;;)
{
if(pmartrix)
{
delete pmartrix;
pmartrix = null;
}
printf("\n----------------------------\ninput side length,0 to quit :");
scanf("%d",&sidelength);
if(sidelength<=0)
break;
if(sidelength>=100)
{
printf("too big");
continue;
}
pmartrix = getmartrix(sidelength);
pint = pmartrix;
for(j=0;j<sidelength;j++)
{
for(i=0;i<sidelength;i++,pint++)
printf("%.d\t",*pint);
printf("\n");
}
}
return 0;
}
好了,喝酒吧,哈哈哈哈
其实我最喜欢这样的问题了,好玩。。。。。。
把 greenever(司马青杉) 的程序改成下面这样就可以输入一个整数得到想要的矩阵了。
int main(int argc, char* argv[])
{
printf("hello world!\n");
int i,n;
printf("input a number:");
scanf("%d",&n);
printf("the output matrix is:!\n");
for(i=1;i<=n;i++)
{
helix(1,n,i);
printf("\n");
}
return 0;
}