循环-铺地板

这篇博客介绍了如何利用C语言编程,生成一种特殊的室内装潢设计——'之'字型大理石地砖铺设图案,旨在帮助室内装潢工程队的配料员更高效地完成工作。
部署运行你感兴趣的模型镜像

【题】

铺地板(选作)


背景:

    你是一名室内装潢工程队的配料员。你的伙伴们喜欢采用“之”字型的方式铺大理石地砖,图案如下:

1 2 6 7 15
3 5 8 14 16
4 9 13 17 22
10 12 18 21 23
11 19 20 24 25

学了 C 语言以后,你决定编写一个程序,帮助你的同伴生成这样的图形。

输入:

    方阵N的大小。

输出

    方阵。

  测试输入关于“测试输入”的帮助 期待的输出关于“期待的输出”的帮助 时间限制关于“时间限制”的帮助 内存限制关于“内存限制”的帮助 额外进程关于“{$a} 个额外进程”的帮助
测试用例 1 以文本方式显示
  1. 5↵
以文本方式显示
  1.  1  2  6  7 15↵
  2.  3  5  8 14 16↵
  3.  4  9 13 17 22↵
  4. 10 12 18 21 23↵
  5. 11 19 20 24 25↵
1秒 64M 0
测试用例 2 以文本方式显示
  1. 3↵
以文本方式显示
  1.  1  2  6↵
  2.  3  5  7↵
  3.  4  8  9↵
1秒 64M 0
测试用例 5 以文本方式显示
  1. 9↵
以文本方式显示
  1.  1  2  6  7 15 16 28 29 45↵
  2.  3  5  8 14 17 27 30 44 46↵
  3.  4  9 13 18 26 31 43 47 60↵
  4. 10 12 19 25 32 42 48 59 61↵
  5. 11 20 24 33 41 49 58 62 71↵
  6. 21 23 34 40 50 57 63 70 72↵
  7. 22 35 39 51 56 64 69 73 78↵
  8. 36 38 52 55 65 68 74 77 79↵
  9. 37 53 54 66 67 75 76 80 81↵
1秒 64M 0

【分析】
            定义四个方向,分别表示数字增加时走的方向。利用状态机的思想,来控制方向。我给状态排了一下序,所以每次状态改变时,状态是自增1的。

【代码】
          
        代码中仅考虑了n为奇数的情况,n为偶数时,是类似的,请读者自行编写。
#include "stdio.h"

#define MAX 100

int main(int argc, char **argv)
{
	int n , arr[MAX][MAX];
	scanf("%d", &n);
	getchar();

	//此程序只考虑n为奇数的情况。n为偶数时类似,只是状态state得调整一下
	if (n % 2 == 0)
        {
                printf("不支持n为偶数的情况。\n");
                return -1;
        }

	int num = 1;		//自增的数字
	int state = 0;		//状态,对应数字递增的方向

	int i = 1, j = 1;
	
	//上三角部分
	while (1)
	{
		arr[i][j] = num++;
		if (i == 1 || j == 1)           //碰到边缘,改变状态
			state = (state + 1) % 4;    //变成下一下一种状态,即下一种方向
		if (i == 1 && j == n)
			break;

		switch (state)
		{
		case 0:       //右上
			i--;
			j++;
			break;
		case 1:       //向右
			j++;
			break;
		case 2:       //左下
			i++;
			j--;
			break;
		case 3:       //向下
			i++;
			break;
		}	
	}

	state = 0;
	i = 2;	j = n;

	//下三角部分
	while (1)
	{
		arr[i][j] = num++;
		if (i == n || j == n)			//碰到边缘,改变状态
			state = (state + 1) % 4;    //变成下一下一种状态,即下一种方向
		if (i == n && j == n)
			break;
		
		switch (state)
		{
		case 3:       //右上
			i--;
			j++;
			break;
		case 2:       //向右
			j++;
			break;
		case 1:       //左下
			i++;
			j--;
			break;
		case 0:       //向下
			i++;
			break;
		}	
	}

	//输出
	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= n; j++)
		{
			if (j != n)
				printf("%2d ", arr[i][j]);
			else
				printf("%2d", arr[i][j]);
		}
		printf("\n");
	}

	return 0;
}

【运行截图】



您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值