回复 3楼 StarWing83
看你的题我写了一个.
输入: 6 4 0 1
显示:
1 2 3 4 5 6
1 3 1 4 1 7
2 1 6 1 5 8
1 1 1 0 1 9
·
输入:5 5 1 333
显示:
3 3 7 3 3
3 3 0 4 6
3 8 3 3 3
3 3 3 9 3
3 4 3 3 5
·
程序代码:
#include <stdio.h>
void alloc(int ***a,int **b,int width,int height,int start)
{
int i,n=0,*p,m[10];
*a=(int **)malloc(sizeof(int *)*height);
**a=(int *)malloc(sizeof(int) * width * height);
for(i=1;i<height;i++)
(*a)[i]=**a + width * i;
*b=(int *)malloc(sizeof(int) * width * height);
for(i=-1,p=*b;p<*b+width*height;p++)
{
if(i==-1)
{
n=start++;
while(n)
{
m[++i]=n%10;
n/=10;
}
}
*p=m[i--];
}
}
int main(void)
{
int i,j,k,n,wm,hm,**a,*b,*p;
int width,height,dir,start;
while(scanf("%d%d%d%d",&width,&height,&dir,&start)==4)
{
printf("\n\n");
alloc(&a,&b,width,height,start);
wm=width-1,hm=height-1;
n=i=j=0;
k=1;
for(p=b;p<b+width*height;p++)
{
a[i][j]=*p;
if(dir==0)
{
if(n++<wm) j+=k;
else i+=k;
}
else
{
if(n++<hm) i+=k;
else j+=k;
}
if(n>wm+hm)
{
n=0;
k*=-1;
i+=k;
j+=k;
wm--;
hm--;
}
}
for(i=0;i<height;i++)
{
for(j=0;j<width;j++)
printf("%d ",a[i][j]);
printf("\n\n");
}
}
return 0;
}
[
本帖最后由 UserYuH 于 2009-11-18 23:27 编辑 ]