第1讲 简单计算题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10
棋盘上的距离
➢ 象:棋盘上的格点分为两类: • 一类是格点的横纵坐标之差为奇数; • 一类是格点的横纵坐标之差为偶数。 • 对于只能斜走的象,它每走一步,因为横纵坐标 增加或减少的绝对值相等,所以横纵坐标之差的 奇偶性无论如何行走都保持不变。因此,上述的 第一类点和第二类点不能互相到达。如果判断出 起始点和终止点分别属于两类点,就可以得出它 们之间需要无数步的结论。 • 如果它们属于同一类点,需要1(x的绝对值等于 y的绝对值)或2(x的绝对值不等于y的绝对值)。
❖ 输入样例:
➢2 ➢ a1 c3 ➢ f5 f8
❖ 输出样例:
➢2121 ➢ 3 1 1 Inf
9
棋盘上的距离
❖ 解题思路:
➢ 题目的重点是要分析王、后、车、象的行走规则特 点,从而推出它们从起点到终点的步数。
➢ 我们假设起始位置与终止位置在水平方向上的距离 为x,在竖直方向上的距离为y。 • 王:min(x,y)+abs(x-y) • 后:1(x=y或者x=0或者y=0)或2(x≠y) • 车:1(x=0或y=0)或2(x和y都不等于0)
6
棋盘上的距离
❖ 问题描述:
➢ 国际象棋 的棋盘是 黑白相间 的8*8的 方格,棋 子放在格 子中间。
7
棋盘上的距离
❖ 王、后、车、象的走子规则如下:
➢ 王:横、直、斜都可以走,但每步限走一格; ➢ 后:横、直、斜都可以走,每步格数不受限制; ➢ 车:横、竖均可以走,不能斜走,格数不限; ➢ 象:只能斜走,格数不限。 ➢ 写一个程序,给定起始位置和目标位置,计算王、
➢ 这个题目给出的范围是大的区间在1-10000以内,要 去除的小的区间的个数是100个以内。因为规模较小, 所以可以考虑用空间换时间,用一个大数组来模拟这 些区间,数组中的每个数表示区间上的一个数。
➢ 例如,如果输入L的长度是500,则据题意可知最初 有501棵树。我们就用一个501个元素的数组来模拟 这501棵树,数组的下标分别代表从1到501棵树,数 组元素的值代表这棵树是否被移走。
11
12
13
校门外的树
❖ 问题描述:
➢ 某校大门外长度为L的马路上有一排树,每两颗相邻 的树之间的间隔都是1米。我们可以把马路看成一个 数轴,马路的一端在数轴0的位置,另一端在L的位置; 数轴上的每个整数点,即0,1,2,…,L,都种有 一棵树。
➢ 由于马路上有一些区域要用来建地铁。这些区域用它 们在数轴上的起始点和终止点表示。已知任一区域的 起始点和终止点的坐标都是整数,区域之间可能有重 合的部分。现在要把这些区域中的树(包括区域端点 处的两棵树)移走。你的任务是计算将这些树都移走 后,马路上还有多少棵树。
19
练习-装箱问题
20
➢ 当所有小区间输入完成,我们可以数一下剩下的仍旧 为true的元素的个数,就可以得到最后剩下的树的数 目。
17
18
校门外的树
❖ 思考:
➢ 语句13最坏情况下要执行多少次?最好情况下要被执 行多少次?如果区间的起点和终点是随机分布的,那 么语句13平均要被执行多少次?(答案是L和M的函 数)
➢ 如果马路长度L的值极大,比如是40亿,以至于无法 开设这么大的trees数组,本题该如何解决?
14
校门外的树
❖ 输入数据:第1行有两个整数L(1<=L<=10000) 和M(1<=M<=100),L代表马路的长度,M 代表区域的数目,L和M之间用一个空格隔开。接 下来的M行每行包含两个不同的整数,用一个空 格隔开,表示一个区域的起始点和终止点的坐标。
❖ 输出要求:输出包括一行,这一行只包含一个整 数,表示马路上剩余的树的数目。
4
5
源自文库
鸡兔同笼
❖ 实现中常见的问题:
➢ 因为对问题分析不清楚,给出了错误的计算公式; ➢ 不用数学方法,而试图用枚举所有鸡和兔的个数来求
解此题,造成超时; ➢ 试图把所有输入先存储起来,再输出,开的数组太小,
因数组越界产生运行错; ➢ 在每行输出末尾缺少换行符; ➢ 对输入输出语法不熟悉导致死循环或语法错。
❖ 输出要求:n行,每行输出对应一个输入。输出 是两个正整数,第一个是最少的动物数,第二 个是最多的动物数,两个正整数用空格分开。 如果没有满足要求的情况出现,则输出2个0。
❖ 输入样例:
➢2
➢3
➢ 20
❖ 输出样例:
➢00
➢ 5 10
3
鸡兔同笼
❖ 解题思路:
➢ 这个问题可以描述成任给一个整数N,如果N是奇数, 输出0 0,否则如果N是4的倍数,输出N/4 N/2,如 果N不是4的倍数,输出N/4+1 N/2。这是一个一般 的计算题,只要实现相应的判断和输出代码就可以了。 题目中说明了输入整数在一个比较小的范围内,所以 只需要考虑整数运算就可以了。
后、车、象从起始位置走到目标位置所需的最小步 数。
8
棋盘上的距离
❖ 输入数据:第1行是测试数据的组数 t(0<=t<=20)。以下每行是一组测试数据,每组 包括棋盘上的两个位置,第一个是起始位置,第 二个是目标位置。位置用“字母-数字”的形式表 示,字母从“a”到“h”,数字从“1”到“8”。
❖ 输出要求:对输入的每组测试数据,输出王、后、 车、象所需的最小步数。如果无法到达,就输出 “Inf”。
第一讲 简单计算题
1
鸡兔同笼
❖ 问题描述:
➢ 一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只 脚,没有例外)。已经知道了笼子里面脚的总数a, 问笼子里面至少有多少只动物,至多有多少只动物。
2
鸡兔同笼
❖ 输入数据:第1行是测试数据的组数n,后面跟 着n行输入。每组测试数据占1行,包括一个正 整数a(a<32768)。
❖ 输入样例:
➢ 500 3
➢ 150 300
➢ 100 200
➢ 470 471
❖ 输出样例:
➢ 298
15
校门外的树
❖ 解题思路:
➢ 这个问题可以概括为输入一个大的整数闭区间,及一 些可能互相重叠的在该大区间内的小的整数闭区间。 在大的整数闭区间内去除这些小的整数闭区间,问之 后剩下的可能不连续的整数区间内有多少个整数。
16
校门外的树
❖ 解题思路:
➢ 最初这些树没有被移走,所以所有数组元素的值都用 true来表示。每当输入一个小区间,就将这个区间对 应的树全部移走,即将这个区间对应的数组元素下标 指示的元素的值置成false。如果有多个区间对应同 一个数组元素,会导致多次将某个数组元素置成 false。不过这并不影响结果的正确性。
棋盘上的距离
➢ 象:棋盘上的格点分为两类: • 一类是格点的横纵坐标之差为奇数; • 一类是格点的横纵坐标之差为偶数。 • 对于只能斜走的象,它每走一步,因为横纵坐标 增加或减少的绝对值相等,所以横纵坐标之差的 奇偶性无论如何行走都保持不变。因此,上述的 第一类点和第二类点不能互相到达。如果判断出 起始点和终止点分别属于两类点,就可以得出它 们之间需要无数步的结论。 • 如果它们属于同一类点,需要1(x的绝对值等于 y的绝对值)或2(x的绝对值不等于y的绝对值)。
❖ 输入样例:
➢2 ➢ a1 c3 ➢ f5 f8
❖ 输出样例:
➢2121 ➢ 3 1 1 Inf
9
棋盘上的距离
❖ 解题思路:
➢ 题目的重点是要分析王、后、车、象的行走规则特 点,从而推出它们从起点到终点的步数。
➢ 我们假设起始位置与终止位置在水平方向上的距离 为x,在竖直方向上的距离为y。 • 王:min(x,y)+abs(x-y) • 后:1(x=y或者x=0或者y=0)或2(x≠y) • 车:1(x=0或y=0)或2(x和y都不等于0)
6
棋盘上的距离
❖ 问题描述:
➢ 国际象棋 的棋盘是 黑白相间 的8*8的 方格,棋 子放在格 子中间。
7
棋盘上的距离
❖ 王、后、车、象的走子规则如下:
➢ 王:横、直、斜都可以走,但每步限走一格; ➢ 后:横、直、斜都可以走,每步格数不受限制; ➢ 车:横、竖均可以走,不能斜走,格数不限; ➢ 象:只能斜走,格数不限。 ➢ 写一个程序,给定起始位置和目标位置,计算王、
➢ 这个题目给出的范围是大的区间在1-10000以内,要 去除的小的区间的个数是100个以内。因为规模较小, 所以可以考虑用空间换时间,用一个大数组来模拟这 些区间,数组中的每个数表示区间上的一个数。
➢ 例如,如果输入L的长度是500,则据题意可知最初 有501棵树。我们就用一个501个元素的数组来模拟 这501棵树,数组的下标分别代表从1到501棵树,数 组元素的值代表这棵树是否被移走。
11
12
13
校门外的树
❖ 问题描述:
➢ 某校大门外长度为L的马路上有一排树,每两颗相邻 的树之间的间隔都是1米。我们可以把马路看成一个 数轴,马路的一端在数轴0的位置,另一端在L的位置; 数轴上的每个整数点,即0,1,2,…,L,都种有 一棵树。
➢ 由于马路上有一些区域要用来建地铁。这些区域用它 们在数轴上的起始点和终止点表示。已知任一区域的 起始点和终止点的坐标都是整数,区域之间可能有重 合的部分。现在要把这些区域中的树(包括区域端点 处的两棵树)移走。你的任务是计算将这些树都移走 后,马路上还有多少棵树。
19
练习-装箱问题
20
➢ 当所有小区间输入完成,我们可以数一下剩下的仍旧 为true的元素的个数,就可以得到最后剩下的树的数 目。
17
18
校门外的树
❖ 思考:
➢ 语句13最坏情况下要执行多少次?最好情况下要被执 行多少次?如果区间的起点和终点是随机分布的,那 么语句13平均要被执行多少次?(答案是L和M的函 数)
➢ 如果马路长度L的值极大,比如是40亿,以至于无法 开设这么大的trees数组,本题该如何解决?
14
校门外的树
❖ 输入数据:第1行有两个整数L(1<=L<=10000) 和M(1<=M<=100),L代表马路的长度,M 代表区域的数目,L和M之间用一个空格隔开。接 下来的M行每行包含两个不同的整数,用一个空 格隔开,表示一个区域的起始点和终止点的坐标。
❖ 输出要求:输出包括一行,这一行只包含一个整 数,表示马路上剩余的树的数目。
4
5
源自文库
鸡兔同笼
❖ 实现中常见的问题:
➢ 因为对问题分析不清楚,给出了错误的计算公式; ➢ 不用数学方法,而试图用枚举所有鸡和兔的个数来求
解此题,造成超时; ➢ 试图把所有输入先存储起来,再输出,开的数组太小,
因数组越界产生运行错; ➢ 在每行输出末尾缺少换行符; ➢ 对输入输出语法不熟悉导致死循环或语法错。
❖ 输出要求:n行,每行输出对应一个输入。输出 是两个正整数,第一个是最少的动物数,第二 个是最多的动物数,两个正整数用空格分开。 如果没有满足要求的情况出现,则输出2个0。
❖ 输入样例:
➢2
➢3
➢ 20
❖ 输出样例:
➢00
➢ 5 10
3
鸡兔同笼
❖ 解题思路:
➢ 这个问题可以描述成任给一个整数N,如果N是奇数, 输出0 0,否则如果N是4的倍数,输出N/4 N/2,如 果N不是4的倍数,输出N/4+1 N/2。这是一个一般 的计算题,只要实现相应的判断和输出代码就可以了。 题目中说明了输入整数在一个比较小的范围内,所以 只需要考虑整数运算就可以了。
后、车、象从起始位置走到目标位置所需的最小步 数。
8
棋盘上的距离
❖ 输入数据:第1行是测试数据的组数 t(0<=t<=20)。以下每行是一组测试数据,每组 包括棋盘上的两个位置,第一个是起始位置,第 二个是目标位置。位置用“字母-数字”的形式表 示,字母从“a”到“h”,数字从“1”到“8”。
❖ 输出要求:对输入的每组测试数据,输出王、后、 车、象所需的最小步数。如果无法到达,就输出 “Inf”。
第一讲 简单计算题
1
鸡兔同笼
❖ 问题描述:
➢ 一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只 脚,没有例外)。已经知道了笼子里面脚的总数a, 问笼子里面至少有多少只动物,至多有多少只动物。
2
鸡兔同笼
❖ 输入数据:第1行是测试数据的组数n,后面跟 着n行输入。每组测试数据占1行,包括一个正 整数a(a<32768)。
❖ 输入样例:
➢ 500 3
➢ 150 300
➢ 100 200
➢ 470 471
❖ 输出样例:
➢ 298
15
校门外的树
❖ 解题思路:
➢ 这个问题可以概括为输入一个大的整数闭区间,及一 些可能互相重叠的在该大区间内的小的整数闭区间。 在大的整数闭区间内去除这些小的整数闭区间,问之 后剩下的可能不连续的整数区间内有多少个整数。
16
校门外的树
❖ 解题思路:
➢ 最初这些树没有被移走,所以所有数组元素的值都用 true来表示。每当输入一个小区间,就将这个区间对 应的树全部移走,即将这个区间对应的数组元素下标 指示的元素的值置成false。如果有多个区间对应同 一个数组元素,会导致多次将某个数组元素置成 false。不过这并不影响结果的正确性。