作者FakeGPS (一次就上手)
看板Python
标题Re: [问题] 求救!期中考第二三题(2000p)
时间Sun Apr 22 20:30:46 2018
※ 引述《kevinc0227 (icedragon)》之铭言:
: 但是第二题开始就有点不知该如何下手,目前的想法如下:
: 1.使用第一题的程式读档,dict格式。
: 2.列出所有点的TM2座标,list格式。
: 3.接下来想要将每个点的(x,y)座标减去所求点的座标,求得与所求点距离小於1.5(根号2)的点。
: 4.开一个空dict(list?),将范围内的点的人口数放入。
: 5.最後比较哪一个所求点的人口数最多。
: 目前实在不知道3.4.5该如何以程式写出。
: (图二)目前进度:http://i.imgur.com/I5e2Wwm.jpg
: (附二)说明影片:http://bit.ly/2HjeqWl
: (附二)影片是一开始用来思考该如何决定卖场座标的思考方式,虽然题目说明服务范围是正方形,以方形斜边一半为半径的圆,不会影响卖场座标,或许比较好思考,但之後该如何决定正方形的角度就不晓得了。
: 目前的想法如上,也不太确定这样选取范围的方式是否正确,实在焦头烂额,感谢各位愿意协助的版友。
我也是新手 来讨论一下
题目是没有写得很清楚
不过我猜你们误解老师的用意了
你们想的方向算是进阶版
如果你们基础版ok了再进阶吧
题目既然给的是3x3方块
可见他没有要你们搞得那麽复杂
否则为什麽不是用直径3的圆形范围呢
圆形范围不是比较直观吗
如果是3x3方块下去摆放(不旋转)
那其实问题简化很多
也比较符合你们的程度
有2个做法:
第一个直接暴力地毯式搜索
在地图上改变xy座标去滑动
被包进3x3之中的就累计人口数
然後你会得到你要的
第二个方法会非常简单
你把每个行政里中心点依序放在3x3方块的四个顶点
然後去看包到多少人口
如行政里1中心点为x,y
你就看这四个范围
(x+3, y+3) (x+3, y-3) (x-3, y+3) (x-3, y-3)
共包到多少人口
依序把所有所有里跑过一遍
会有四个里放在顶点 得到最大人口数
这四个里就是解
然後你就会归纳出
3x3的中心可以摆放在
x = 最左边的里x+1.5 ~ 最右边的里x-1.5
y = 最上面的里y-1.5 ~ 最下面的里y+1.5
可以包到最多人
如果有误欢迎指教啊
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.136.48.115
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1524400248.A.75C.html
※ 编辑: FakeGPS (220.136.48.115), 04/22/2018 20:35:10
1F:→ FakeGPS: 补充 这四个里 也有可能重复 变成三个里 二个里之类的 04/22 20:36
没画图有点不好表达 不知道你能不能理解我说的
※ 编辑: FakeGPS (220.136.48.115), 04/22/2018 20:43:19
2F:推 kevinc0227: 真的谢谢大大肯回我们 我们赶紧写写看 04/22 20:44
3F:→ FakeGPS: 我觉得老师的用意应该是要你们这样做 不可能才初学者就搞 04/22 20:47
4F:→ FakeGPS: 死你们 整个逻辑大约是这样 我怕我表达不清楚 加油 04/22 20:48
5F:→ FakeGPS: 注意每个里有四个摆放方式喔 因为3x3有四个顶点 04/22 20:49
6F:→ FakeGPS: 总之最後你的解会是一个方型区域 只要卖场中心在其中即可 04/22 20:53
7F:→ FakeGPS: 这个方型区域的四个端点 跟你找到的那四个里有关 04/22 20:53
8F:→ plih: 作业自己写 04/22 22:28
10F:→ dx7880880212: 抱歉打扰,感觉是这样先一个点当中心,再加入其他范 04/22 22:34
11F:→ dx7880880212: 围内的点,可是这样出来的结果好像不太对@a 04/22 22:34
12F:→ FakeGPS: 你的code很漂亮 可能我表达不够清楚 04/22 22:46
13F:→ FakeGPS: <要改用<= 然後不是把pop_1~4加总 而是比大小 04/22 22:47
14F:→ FakeGPS: 每次迭代都检查 是否有更大的pop_1 pop_2 pop_3 pop_4 04/22 22:49
15F:→ FakeGPS: 若有 把那个里记起来 最後会得到pop_1~4都等於某个最大值 04/22 22:50
16F:→ FakeGPS: 我想了一下 最後的那个方形区块解 应该会由某二个里决定 04/22 22:57
17F:推 dx7880880212: 抱歉我在厘清一下,请问是分别比较pop1234,有更大 04/22 23:00
18F:→ FakeGPS: 所以应该是pop_1~4之中的某2个 最後会得到最大值 04/22 23:00
19F:→ dx7880880212: 的pop1就把原本的pop1盖掉,有更大的pop2就把原本 04/22 23:00
20F:→ dx7880880212: 的pop2盖掉,这样吗?然後最後的pop1234再推回原本 04/22 23:00
21F:→ dx7880880212: 的4个点座标吗? 04/22 23:00
22F:→ FakeGPS: 嗯嗯对 有更大的pop1就更新 pop2更新... 04/22 23:02
23F:→ dx7880880212: *再 04/22 23:02
24F:→ FakeGPS: 本题的话 应该只会有某2个pop会是最大值 那两个里的座标 04/22 23:02
25F:→ FakeGPS: 可以推得最後的解 一个方形范围 04/22 23:03
26F:推 dx7880880212: 好的我再试试看,最後解是指以两个里的中心为中心 04/22 23:06
27F:→ dx7880880212: 的正方形是吗? 04/22 23:06
28F:→ FakeGPS: 不一定是正方形唷 会是方形就对了 04/22 23:08
29F:推 dx7880880212: 所以是以两个里为顶点的矩形罗? 04/22 23:10
30F:→ FakeGPS: 那两个里会是对角的两个端点 然後方形区域你就会了 04/22 23:11
32F:→ dx7880880212: 这样跑出来的数字是984517,01120801,948517 04/22 23:42
33F:→ dx7880880212: 0,1120801 04/22 23:42
34F:→ dx7880880212: 修正一下,上面的pop2有打错,这样跑出来的pop2是11 04/22 23:44
35F:→ dx7880880212: 20801 04/22 23:44
36F:→ dx7880880212: 我再想想看要怎麽推回去求点座标@@,谢谢! 04/22 23:46
37F:→ dx7880880212: 不过以台北市1万人口/平方公里来说,这样人好像太多 04/22 23:49
38F:→ dx7880880212: 了,我再研究一下@@ 04/22 23:49
39F:→ FakeGPS: 等等唷 你快成功了但是还是有一个错误 04/22 23:49
40F:→ FakeGPS: 想一下你的pop1 pop1_N pop2 pop2_N... 各代表什麽 04/22 23:52
41F:→ FakeGPS: 在换一个里当端点时 是否有东西该归零 04/22 23:53
42F:→ FakeGPS: 先睡了 记得最後还有"1.5"要考虑 不要错在终点前了 04/23 00:10
44F:→ dx7880880212: 感觉这样的写法没有表达大pop取代小pop,昨天想了半 04/23 09:21
45F:→ dx7880880212: 天也还不太知道怎麽改@@,我们晚上继续,白天还有课 04/23 09:21
46F:→ dx7880880212: Orz 04/23 09:21
47F:→ FakeGPS: 难的部分都解决了 简单的怎麽会想不出来呢 先放松冷静一 04/23 09:41
48F:→ FakeGPS: 下再回来看 还有之前版本的 += 很美啊 04/23 09:42
50F:→ dx7880880212: 目前的解法是长这样,结果後来发现原本数字会到80万 04/24 01:28
51F:→ dx7880880212: 上下跟一开始使用座标形式表示x,y有关@a 04/24 01:28
52F:→ dx7880880212: ,标示在台北市长那样,还算合理了,感谢,继续努力 04/24 01:30
53F:→ dx7880880212: 下一题Orz 04/24 01:30
54F:→ FakeGPS: gj 後半段可以更简洁 不过没关系 code没有最好只有更好 04/24 09:20
55F:→ FakeGPS: 之後你们有空的话可以再检讨看看 04/24 09:21