c语言 回形矩阵 函数法


```c     
 #include <stdio.h>
void right (int a);
void down(int a);
void left(int a);
void up(int a);
int a[30][30], i, j, k,l,n,m,x,y,o,p;
void main()
{
	while (scanf("%d%d", &n, &m) != EOF)
	{
		x = n;
		y = m;//用以判断是否结束及输出
		o = n;
		p = m;//用以计算赋值个数
		i = 1;//用以赋值
		j =0 ;
		k = 0;//二维数组下标
		right(i);//从right开始即可
	}
}
void right(int i)
{
	if (i <= x * y)
	{
		for (l = 0; l < m; l++, k++, i++) a[j][k] = i;
		m -= 2;   //下次用right时赋值个数将减少两个
		k -= 1;   //循环结束后,k多加了一个1,减回来
		j += 1;   //下个被赋值的数为本次赋值的最后一个数的左边第一个
		down(i);   //之后函数的操作类似,就不注释了
	}
	else 
		for (i = 0; i < x; i++)
		{
			for (j = 0; j < y; j++)
			{
				printf("%2d", a[i][j]);
				if (j != y - 1) printf(" ");
			}
			printf("
");
		}

		
}
void down(int i)
{
	if (i <= x * y)
	{
		for (l = 0; l < n-1; l++, j++, i++) a[j][k] = i;
		n -= 2;
		j -= 1;
		k -= 1;
		left(i);
	}
	else
		for (i = 0; i < x; i++)
		{
			for (j = 0; j < y; j++)
			{
			
				printf("%2d", a[i][j]);
				if (j != y - 1) printf(" ");
			}
			printf("
");
		}

}
void left(int i)
{
	if (i <= x * y)
	{
		for ( l = 0; l < p-1; l++, k--, i++) a[j][k] = i;
		p -= 2;
		k += 1;
		j -= 1;
		up(i);
	}
	else
		for (i = 0; i < x; i++)
		{
			for (j = 0; j < y; j++)
			{
				printf("%2d", a[i][j]);
				if (j != y - 1) printf(" ");
			}
			printf("
");
		}

}
void up(int i)
{
	if (i <= x * y)
	{
		for ( l = 0; l < o-2; l++, j--, i++) a[j][k] = i;
		o-= 2;
		j += 1;
		k += 1;
		right(i);
	}
	else
		for (i = 0; i < x; i++)
		{
			for (j = 0; j < y; j++)
			{
				printf("%2d", a[i][j]);
				if (j != y - 1) printf(" ");
			}
			printf("
");
		}

}
```

话说插入代码块到底怎么用

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/292667.html

(0)
上一篇 2022年11月6日
下一篇 2022年11月6日

相关推荐

发表回复

登录后才能评论