蓝桥杯基础练习超全习题题解VIP版——BASIC-25.回形取数(护眼版)外加螺旋填数Python版

每日刷题(四十一)

BASIC-25、回形取数

在这里插入图片描述
在这里插入图片描述
其实这个题和螺旋填数很类似,只是方向不同罢了
这里我先分析一下螺旋填数
在这里插入图片描述
这是我的思路,根据题意,先遍历第0列,我的方式是每次都遍历到“底”,何谓“底”,就是矩阵的边界,这样就能保证都不漏,也可以保证每一环节的依赖性,如果前面没有遍历,那么之后的步骤都不能走,可以达到输出正确的目的。所以我设置了标识符flag,用完一次flag就使它失效(赋值为0),如果这一环节的遍历能进行,则重新激活flag(赋值为1)
我需要设下边界、右边界和上边界,为何不设置左边界,那是因为我外层遍历就是j(列数),j就是左边界

详细C代码如下:

#include<stdio.h>

int main()
{
	int m, n;
	scanf("%d %d", &m, &n);
	int a[m][n];
	int i, j;
	for(i = 0; i < m; i++)
	{
		for(j = 0; j < n; j++)
		{
			scanf("%d", &a[i][j]);
		}
	}
	int u = m, v = n, w = 0;		//u为下边界,v为右边界,w为上边界 
	int t, k, h;
	int flag = 1;
	for(j = 0; j <= n / 2; j++)		//列不变行变 
	{
		if(flag)
		{
			flag = 0;
			for(i = w; i < u; i++)
			{
				printf("%d ", a[i][j]);	
				flag = 1;
			}
			if(flag)
			{
				flag = 0;
				i -= 1;
				for(t = j + 1; t < v; t++) 		//行不变列变 
				{
					printf("%d ", a[i][t]);
					flag = 1;
				}
				if(flag)
				{
					flag = 0;
					t -= 1;
					for(k = i - 1; k >= w; k--)		//列不变行变 
					{
						printf("%d ", a[k][t]);
						flag = 1;
					}
					if(flag)
					{
						flag = 0;
						k += 1;
						for(h = t - 1; h >= j + 1; h--)		//行不变列变 
						{
							printf("%d ", a[k][h]);
							flag = 1;
						}
					}
				}
			}
		}
		w++;
		u--;
		v--;
	}
	printf("\b");
	return 0;
}

Python版螺旋填数解法

import numpy as np

m = int(input('Please enter row:'))
n = int(input('Please enter column:'))
c = np.arange(1, m * n + 1)
c.shape = (m, n)
digit = 0
p = 1

for q in range(int(m / 2)):
    for i in range(q, n - q):
        digit = digit + 1
        c[q][i] = digit

    for j in range(q + 1, m - q):
        digit = digit + 1
        c[j][i] = digit

    for k in range(q + 1, n - q):
        digit = digit + 1
        c[j][n - k - 1] = digit

    for t in range(m - (q + 1) * 2):
        digit = digit + 1
        c[m - (q + 1) - 1 - t][q] = digit

    if n % 2 == 1:
        c[int(m / 2)][q + 1] = digit + 1

如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持,下期更精彩!!!

发布了99 篇原创文章 · 获赞 16 · 访问量 5905

猜你喜欢

转载自blog.csdn.net/qq_44631615/article/details/105135168