第1章习题

1. 证明$m \times n$棋盘被多米诺骨牌完美覆盖当且仅当$m$和$n$中至少有一个是偶数。

证明:$m \times n$棋盘被$t$个多米诺骨牌完全覆盖,于是$mn = 2t$,则$2 | mn$,考虑到$2$是素数,因此$2 | m$或$2 | n$,即$m$和$n$中至少有一个是偶数,证毕。

2. 考虑$m$和$n$都是奇数的$m \times n$棋盘。为了固定表记方式,假设棋盘左上角的方格被着成白色。证明如果切掉棋盘上任意一个白方格,那么这张切过的棋盘有多米诺骨牌完美覆盖。

证明:考虑切掉位于位置$(r, c)$的白格,该白格将剩余棋盘分割为$4$个部分,分别为$(r, c - 1)$,$(r - 1, n - c + 1)$,$(m - r + 1, n - c)$,$(m - r, c)$。注意到$(1, 1)$是白格,白格$(r, c)$满足

$r + c$为偶数,于是$r + c \equiv 0(\text{mod } 2)$由于:

$(r, c - 1) \rightarrow r + c - 1 \equiv -1(\text{mod }2) \equiv 1(\text{mod }2)$;

$(r - 1, n - c + 1) \rightarrow r - c + n \equiv r - c + 1(\text{mod }2) \equiv 2c + 1(\text{mod }2)\equiv 1(\text{mod }2)$;

$(r, c - 1) \rightarrow m + n - r - c + 1 \equiv m + n + 1(\text{mod }2)\equiv 1(\text{mod }2)$;

$(r, c - 1) \rightarrow m + c - r \equiv 2r+1(\text{mod }2) \equiv 1(\text{mod }2)$;

结合$1$题中结论,它们分别存在完美覆盖,于是剩余棋盘存在完美覆盖。证毕。

3. 想象一座由$64$个囚室组成的监狱,这些囚室被排列成$8 \times 8$棋盘。所有相邻的囚室间都有门。某角落处一间囚室的囚犯被告知,如果他能够经过其它每一个囚室恰好一次之后,达到对角线上相对的另一间囚室,那么他就可以获释。他能够获得自由吗?

解:不能。

证法1:考虑到经过每个囚室恰一次,他需要移动$64 - 1 = 63$次,那么我们将$(1, 1)$着成白色,他到达的位置必然是黑格,因为每走一步所在方格颜色反转一次,而$(8, 8)$是白格。所以他不可能止步于终点。

证法2:假设对于$m \times n$的方格存在合法的路径到达对角方格,那么显然$M \times n$也存在合法路径,其中$M = m + 2$,于是我们可以将该问题归约为是否存在$2 \times 2$的方格上的合法路径,经过简单尝试知道不存在。

4. (a)设$f(n)$计数$2 \times n$棋盘的多米诺骨牌完美覆盖的数量。估计一下$f(1), f(2), f(3), f(4)$和$f(5)$。试寻找(或证明)这个计数函数$f$满足的简单关系。利用这个关系计算$f(12)$。

 (b)设$g(n)$是$3 \times n$棋盘的多米诺骨牌完美覆盖的数量。估计$g(1), g(2), ..., g(6)$。

解:(a)这里直接给出结论:$f(1) = 1$,$f(2) = 2$,$f(n) = f(n -1) + f(n - 2) (n > 2)$。

  (b)直接给出答案(可以使用分解法找出迭代关系):$g(1) = 0, g(2) = 3, g(3) = 0, g(4) = 9, g(5) = 0, g(6) = 33$。

5. 求$3 \times 4$棋盘的多米诺骨牌完美覆盖的个数。

解:$9$。

6. 考虑下面的棋盘问题的三维形式:定义三维多米诺骨牌是这样的一个几何图形,它是由变成为一个单位的两个立方体面对面连接起来的几何体。证明有可能由多米诺骨牌构造出一个边长为$n$个单位的立方当且仅当$n$是偶数。如果$n$是奇数,是否有可能构造出一个边长为$n$个单位的正方体,且其中心部分有一个$1 \times 1$的洞呢?

解:证明:

  充分性:若$n$是偶数,由$1$题中结论,存在对于$n \times n \times 1$的完美覆盖,因此显然存在对于$n \times n \times n$的完美覆盖。

  必要性:若$n$为奇数,若存在完美覆盖且使用三位多米诺骨牌$t$个,于是$2t = n ^ 3$,由于$n$为奇数,$n^3 \equiv 1(\text{mod } 2)$,矛盾。因此$n$是偶数。

  

  考虑到若对于$n \times n$,进行黑白着色,那么主对角线方格同色,使用$2$题中结论,易证存在完美覆盖。

7. 设$a$和$b$是正整数且$a$是$b$的因子。证明$m \times n$棋盘有$a \times b$牌的完美覆盖当且仅当$a$既是$m$的因子又是$n$的因子,而$b$是$m$或$n$的因子。

证明:

  充分性:记$C = \frac{b}{a}$,不失一般性地设$b | m$,由于$a | m$且$a | n$,考虑棋盘$\frac{m}{a} \times \frac{n}{a}$存在$1 \times C$的完美覆盖,这是因为$b | m$即$aC | m$即$C | \frac{m}{a}$,因此只需将按比例放大$a$倍,得到棋盘$m \times n$存在$a \times b$的完美覆盖。

  必要性:由于$m \times n$存在$a \times b$的完美覆盖,因此存在$1 \times b$的完美覆盖,因此$b$是$m$或$n$的因子。注意到$a \times a$是$a \times b$的完美覆盖,因此$a \times a$是$m \times n$的完美覆盖,显然$a$即是$m$的因子又是$n$的因子。证毕。

8. 利用习题7证明当$a$是$b$的因子时,$m \times n$棋盘有$a \times b$的完美覆盖当且仅当这个棋盘有平凡完美覆盖,其中所有的牌都指向相同的方向。

证明:

  充分性:显然。

  必要性:由于$m \times n$有$a \times b$的完美覆盖,于是$a$是$m$和$n$的因子,$b$是$m$或$n$的因子。不失一般性地,假设$b$是$n$的因子,只需证明$a \times b$是$m \times b$的完美覆盖,只需证明$a \times 1$是$m \times 1$的完美覆盖,由于$a | m$,于是得证。

9. 证明当$a$不是$b$的因子时,练习题8的接邻不一定成立。

解:举一反例:$6 \times 5$有$2 \times 3$的完美覆盖如下,但$2 \nmid 5$。

时间: 2024-10-10 02:41:18

第1章习题的相关文章

《学习Opencv》第五章 习题6

这是第五章 习题5.6的结合版,其中实现了摄像头抓拍功能,能够成功运行. #include "stdafx.h" #include "cv.h" #include "highgui.h" void* getImage() { CvCapture* capture=cvCreateCameraCapture(0); IplImage *img1=NULL,*img2=NULL,*img3=NULL,*frame=NULL,*ppImage=NULL

Learning Perl 第九章习题第二题

把输入文件中的所有Fred换成Larry, 不区分大小写. 知识点 1. 文本文件读写 2. 简单的正则替换 3. unless 的用法 4. $_ 的用法 Learning Perl 第九章习题第二题,布布扣,bubuko.com

Python核心编程(第二版) 第六章习题答案

6–1.字符串.string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分? 答:有,string.find(str,beg,end) 6–2.字符串标识符.修改例 6-1 的 idcheck.py 脚本,使之可以检测长度为一的标识符,并且可以识别 Python 关键字,对后一个要求,你可以使用 keyword 模块(特别是 keyword.kelist)来帮你. 1 #!/usr/bin/python 2 3 import string 4 impo

Python核心编程(第二版) 第四章习题答案

4-1.Python对象.与所有Python对象有关的三个属性是什么?请简单的描述一下.答:与所有Python对象有关的三个属性是身份.类型.值.身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到.这个值可以被认为是该对象的内存地址.类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么规则.可以用内建函数type()来查看Python的类型.值:对象表示的数据项.4-2.类型.不可更改(immutable)指的是什么?Pyth

第四章习题:斐波那.契数列&&吸血鬼数字

package com.twoslow.cha4; /** * 斐波那契数列:从3个数字起,每一个数都是前2个数之和:1 1 2 3 5 8 13... * @author sai * */ public class Fibonacci { public static void main(String[] args) { for(int i = 0 ; i < 10 ;i++) { System.out.print(fib(i) + "."); } } public static

Python核心编程(第二版) 第五章习题答案

5-1.整型.讲讲Python普通整型和长整型的区别. 答:Python 的标准整数类型是最通用的数字类型.在大多数 32 位机器上,标准整数类型的取值范围是-2**31到 2**31-1,也就是-2,147,483,648 到 2,147,483,647.如果在 64 位机器上使用 64 位编译器编译 Python,那么在这个系统上的整数将是 64 位. Python 的长整数类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小有关. 5-2.操作符.(a)写一个函数,计算并返回两个数的乘积.

Python核心编程第五章习题

Python核心编程-第五章-习题 5.1  整形,讲讲Python普通整形与长整形的区别? Python的标准整形类型是最通用的数字类型.在大多数32位机器上,标准整形类型的取值范围是-2**32-2**32 - 1. Python的长整型类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小有关,换句话说,Python能轻松表达很大的整数. 长整型类型是标准整形类型的超集,当程序需要使用比标准整形更大的整型时,可以使用长整型类型,在整型值后面添加L,表示这个为长整型,3.0版本已经统一称为为整

统计学习导论:基于R应用——第四章习题

第四章习题,部分题目未给出答案 1. 这个题比较简单,有高中生推导水平的应该不难. 2~3证明题,略 4. (a) 这个问题问我略困惑,答案怎么直接写出来了,难道不是10%么 (b) 这个答案是(0.1*0.1)/(1*1),所以答案是1% (c) 其实就是个空间所占比例,所以这题是(0.1**100)*100 = 0.1**98% (d) 这题答案显而易见啊,而且是指数级别下降 (e) 答案是0.1**(1).0.1**(1/2).0.1**(1/3)...0.1**(1/100) 5. 这题

Python核心编程(第二版) 第二章习题答案 未完待续

2-2.程序输出.阅读下面的Python脚本.#!/usr/bin/env python1 + 2 * 4(a)你认为这段脚本是用来做什么的?(b)你认为这段脚本会输出什么?(c)输入以上代码,并保存为脚本,然后运行它,它所做的与你的预期一样吗?为什么一样/不一样?(d)这段代码单独执行和在交互解释器中执行有何不同?试一下,然后写出结果.(e)如何改进这个脚本,以便它能和你想象的一样工作?答:(a)这段脚本是用来计算表达式的值(b)脚本会输出9(c)保存为脚本,运行后没有输出.和自己预期不一样.

第一章习题

1.2 #include <iostream>#include <stdio.h>#include <vector>#include <iterator>#include <stdlib.h>using namespace std; char arr[20][20]; char words[30][4]={ "boy","own","sad","job","