Algorithm 将车放置在$nxn$棋盘上的算法,以便它们精确攻击$m$方块
假设有一个尺寸为nxn的棋盘,你把车放在棋盘上,让它们集体攻击棋盘上的m个方块。给定n和m,如何确定棋盘上必须放置多少辆车,以及将它们放置在何处 例如,假设电路板尺寸为3x3,您必须通过放置Rook来覆盖电路板上的9个正方形。要做到这一点,或者简单地用车覆盖木板,这样就没有安全的方块,你可以在坐标(1,1)中放置3辆车;(1,2);(1,3)在板上(坐标中的第一个数字是列号,第二个是行号)。这样,由于一辆车攻击与其所在位置相同的行和列中的所有方块,因此所有9个方块都会受到攻击Algorithm 将车放置在$nxn$棋盘上的算法,以便它们精确攻击$m$方块,algorithm,Algorithm,假设有一个尺寸为nxn的棋盘,你把车放在棋盘上,让它们集体攻击棋盘上的m个方块。给定n和m,如何确定棋盘上必须放置多少辆车,以及将它们放置在何处 例如,假设电路板尺寸为3x3,您必须通过放置Rook来覆盖电路板上的9个正方形。要做到这一点,或者简单地用车覆盖木板,这样就没有安全的方块,你可以在坐标(1,1)中放置3辆车;(1,2);(1,3)在板上(坐标中的第一个数字是列号,第二个是行号)。这样,由于一辆车攻击与其所在位置相同的行和列中的所有方块,因此所有9个方块都会受到攻击 但是,如何用算法找
但是,如何用算法找到任意n和m的最佳坐标呢?如果覆盖x行和y列,那么覆盖n(x+y)-xy正方形,需要max(x,y)rooks 解决问题的一个简单算法是,尝试为每个可能的x值计算y的匹配值,并记住需要最少rooks的解决方案 对于更复杂的、适用于更大问题的解决方案,请注意-(N-x)(N-y)=N(x+y)-xy-N^2 如果有一个解决方案覆盖X行和y列来攻击m正方形,那么: m=-(N-x)(N-y)+N^2 所以 (N-x)(N-y)=N^2-m
因此,每个解决方案都对应于将N^2-m分解为一个乘积,并且使用最少的rook数的解决方案是因子最接近的解决方案。你可以从sqrt(N^2-m)开始倒计时,直到找到一个除数,或者使用Fermat的因式分解方法:我投票将这个问题作为离题题题结束,因为它与编程无关。这是一个可以通过编写程序来解决的问题,那么它是如何离题的呢@许多问题都可以通过编写一个程序来解决,但你所问的是一个非常人工的问题(把车放在任意大小的棋盘上),答案是数学证明(你需要提出一个算法,然后证明它是正确的)。这不是一个编码问题。哦,好吧,我会把它贴到math stackexchange上,谢谢你的澄清。@melpomeneI想补充一点,到目前为止,我是唯一一个认为这个问题离题的人,但另外两个人投票认为它“太宽了”。我理解n(x+y)术语,但是为什么需要用xy减去这个数字呢?@hexhdkappa123因为包含排除原则。添加所有被水平线覆盖的对象。然后是垂直线。然后减去交点。