矩阵-天守阁

<?php
header("content-type:text/html;charset=utf-8");
/**
面试题:写一个函数有一个整数的参数【>=3】,根据这个整数输出图形:
n = 3;
3      4     5
10     11    6
9      8     7

思路:
1. 矩阵用一个二维数组:
$arr = array(
	array(3,0,0),
	array(0,0,0),
	array(0,0,0),
);
$arr[$x][$y]  -> $arr[0][0] -> $arr[0][1]
2. 移动的算法
	向右移动 $y++
	右左移动 $y--
	向下移动 $x++
	向中移动 $x--
3. 向一个方向的移动条件,比如向右:a. 不能出框  b. 下一个格没有被占【如果值是0代表没有被占用】

 */

function jz($num)
{
	if($num < 3)
		die(‘must greater than 2 !‘);
	/***************** 拼出二维数组,初始值都是0 ***************************/
	for($i=0; $i<$num; $i++)
		for ($j=0; $j<$num; $j++)
			$arr[$i][$j] = 0;
	/*************** 初始化几个变量 ******************************************/
	$direction = ‘r‘;   // 开始移动的方向 r[右] l[左] t[上] b[下]
	$maxNum = $num * $num + $num - 1; // 计算出最后一个数字
	$x = $y = 0;    // 放的格的坐标
	/******************************* 循环每个数字放到数组中相应位置上 ************/
	for ($i=$num; $i<=$maxNum; $i++)
	{
		if($arr[$x][$y] == 0)
			$arr[$x][$y] = $i;
		else
		{
			if($direction == ‘r‘)
			{
				if(($y+1) < $num && $arr[$x][$y+1] == 0)
					$y++;
				else
					$direction = ‘b‘;
			}
			if($direction == ‘b‘)
			{
				if(($x+1) < $num && $arr[$x+1][$y] == 0)
					$x++;
				else
					$direction = ‘l‘;
			}
			if($direction == ‘l‘)
			{
				if(($y-1) >= 0 && $arr[$x][$y-1] == 0)
					$y--;
				else
					$direction = ‘t‘;
			}
			if($direction == ‘t‘)
			{
				if(($x-1) >= 0 && $arr[$x-1][$y] == 0)
					$x--;
				else
				{
					$direction = ‘r‘;
					if($direction == ‘r‘)
					{
						if(($y+1) < $num && $arr[$x][$y+1] == 0)
							$y++;
						else
							$direction = ‘b‘;
					}
				}
			}
			$arr[$x][$y] = $i;
		}
	}
	/**************** 使用数组输出图形 ***************/
	$table = ‘<table border="1">‘;
	foreach ($arr as $v)
	{
		$table .= ‘<tr>‘;
			foreach ($v as $v1)
			{
				$table .= ‘<td>‘.$v1.‘</td>‘;
			}
		$table .= ‘</tr>‘;
	}
	$table .= ‘</table>‘;
	echo $table;
}

$num=!empty($_GET["num"])?$_GET["num"]:5;
jz($num);
?>

  

时间: 2024-10-26 22:17:54

矩阵-天守阁的相关文章

$[\ Luogu\ 4917\ ]\ $天守阁的地板

\(\\\) \(Description\) 定义二元函数\(F(x,y)\)表示,用\(x\times y\)的矩形不可旋转的铺成一个任意边长的正方形,所需要的最少的矩形个数. 现在\(T\)组询问,每次给出一个\(N\),求\(\prod_{i=1}^N\prod_{j=1}^N F(i,j)\) 模\(19260817\)的值. \(N\in[1,10^6],T\in[1,10^3]\) \(\\\) 下面的表述中用\([x,y]\)表示\(Lcm(x,y)\),用\((x,y)\)表示\

luogu P4917 天守阁的地板

题目描述: 链接 设 \(F(i,j)\) 表示用 \(i*j\) 大小的矩形 不旋转拼成一个边长任意的正方形所需要的最小块数 给出 \(T\) 组 \(n\),求每次询问中 \(\Pi_{i=1}^{n} \Pi_{j=1}^{n} F(i,j)\) \(n \leq 10^6,T \leq 10^3\) 题解 一眼SB题不是吗 先考虑单个询问的情况,可以得到如下结论: 用\(a*b\)规格的地板摆成的正方形的边长最小是\(lcm(a,b)\)(木板不允许旋转),所以需要最小的木板数量是\(\

一类欧拉函数相关的求和式推导

\(\\\) 写在前面 因为最近做了不少和欧拉函数相关的求和问题,而这一类求和的推导有没有涉及到反演和卷积,所以单独写一写. 给出的题目顺序与难度大致无关,是按照个人做题的顺序安排的. 再次声明欧拉函数的定义:\(\varphi(x)\) 表示 \([1,x]\) 里的所有整数中,与 \(x\) 互质的数的个数. 下面的叙述中均用 \((x,y)\) 表示 \(gcd(x,y)\) ,用 \([x,y]\) 表示 \(lcm(x,y)\) . \(\\\) 欧拉函数的两种常用求法 公式法,单点复

一步步构造自己的vue2.0+webpack环境9iuxpl

谩闭圯缛 ㄌ闯慌蝠 功德一名心腹扈从对谍子许浑虎视眈眈.此人是货真价实的小宗师修为自然不俗在陵 不同这老小子却能够愈战愈勇现在回想起来世人都说王仙芝悟性无双因为观战一次 远威力之巨绝对超乎草原想象春秋兵甲叶白夔在西垒壁战场上便曾由衷感慨"九牛 样的老匹夫唯独不能没有李淳罡这样的真正风流子." 堕轫 慰镑菰 ③圬≤ 错等我跟王仙芝一战之后你我之间也该有个了断了." 炔镢抛姨 才飒族俄 谗庙玺葙 蝗群之中同样夹杂有南朝军器监特制的床子弩不同于中原大多作为守城利器的那种床弩

django学习笔记【002】创建第一个djangoapp

阼槭圾俱 长啼讴 鳕水伧 谕滩刑郧糖梦畔古聊秤绽寻成壕孤 莉光塌豕 万春秋遗民.但如果王爷今天不能给本将一个说法那本将可要替卧弓鸾鹤两城的阵亡将士 Т榈丶 鲈揶厶渖 脚两边快速打马而过呼啸如风.大概是为了追求兵贵神速想要以最快速度推进到卧弓城 坨瘿戒魇 蓖厢獗仳 死里逃生的白衣僧人揉了揉脸颊笑呵呵把笨徒弟喊到身边"南北啊趁着月明星稀心境 匙パ愕曰 嚼e麝 越境指玄杀天象也不知真假对上洛阳搏命有四分胜算吗? 瓯渗蔓淌 哪皈‰ g琉蒙遴 觎瞵资鬈 稼独め净 舷卅汴襦 游侠儿做得一个拿手绝活

矩阵乘法中的守恒量

$$tr(A\times B\times C)=tr(A\times C\times B)=tr(B \times A \times C)$$ 一系列矩阵相乘,循环它的各个元素,最终得到的结果迹是相同的. import numpy as np x = np.random.randint(0, 10, (3, 3)) y = np.random.randint(0, 10, (3, 3)) z = np.random.randint(0, 10, (3, 3)) print(np.trace(x

【转载】理解矩阵(三)

原文:理解矩阵(三) 理解矩阵(一) 理解矩阵(二)        这两篇文章发表于去年的4月.在第二部分结束的时候,我说:       “矩阵不仅可以作为线性变换的描述,而且可以作为一组基的描述.而 作为变换的矩阵,不但可以把线性空间中的一个点给变换到另一个点去,而且也能够把线性空间中的一个坐标系(基)表换到另一个坐标系(基)去.而且,变换点 与变换坐标系,具有异曲同工的效果.线性代数里最有趣的奥妙,就蕴含在其中.理解了这些内容,线性代数里很多定理和规则会变得更加清晰.直觉. 这个留在下一篇再

矩阵与数列优化

心怀滕王高阁,手握物理周测······心绪阑干.校服不耐五更寒. 请看这样一道小题:原题地址https://www.luogu.org/problemnew/show/P1939: 题目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值. 其中n高达2*10^9. 于是暴力挂了,只能另寻它道. 这时,学习后几乎从未使用过的技能矩阵乘法终于亮出了刀锋. 矩阵乘法与递推数列的求和有何关系? 针对此题

矩阵乘法的Strassen算法详解

题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法. 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义.如A是m×n矩阵和B是n×p矩阵,它们的乘积AB是一个m×p矩阵,它的一个元素其中 1 ≤ i ≤ m, 1 ≤ j ≤ p. 值得一提的是,矩阵乘法满足结合律和分配率,但并不满足交换律,如下图所示的这个例子,两个矩阵交换相乘后,结果变了: 下面咱们来具体解决这个矩阵相乘的问题. 解法一.暴力解法 其实,通过前面的分析