Skip to content

Commit cc655eb

Browse files
committed
feat: new arithmetic 🔀
1 parent cd15797 commit cc655eb

File tree

3 files changed

+111
-3
lines changed

3 files changed

+111
-3
lines changed

package/Other/HanoiGames.php

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php
2+
3+
/**
4+
* HanoiGames
5+
*
6+
* @author Pu ShaoWei <[email protected]>
7+
* @date 2017/8/26
8+
* @license Mozilla
9+
* -------------------------------------------------------------
10+
* 思路分析:
11+
* -------------------------------------------------------------
12+
* 汉诺塔(又称河内塔)问题是印度的一个古老的传说。
13+
* 开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,
14+
* 第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,
15+
* 庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,
16+
* 但每次只能搬一个,而且大的不能放在小的上面。
17+
*
18+
* 面对庞大的数字(移动圆片的次数)18446744073709551615,看来,众僧们耗尽毕生精力也不可能完成金片的移动。
19+
*
20+
* 后来,这个传说就演变为汉诺塔游戏:
21+
* 1.有三根杆子A,B,C。A杆上有若干碟子
22+
* 2.每次移动一块碟子,小的只能叠在大的上面
23+
* 3.把所有碟子从A杆全部移到C杆上
24+
* 经过研究发现,汉诺塔的破解很简单,就是按照移动规则向一个方向移动金片:
25+
* 如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C
26+
* 此外,汉诺塔问题也是程序设计中的经典递归问题。
27+
*
28+
* @param $n
29+
* @param $x
30+
* @param $y
31+
* @param $z
32+
*/
33+
function HanoiGames($n, $x, $y, $z)
34+
{
35+
if ($n == 1) {
36+
echo 'move disk 1 from ' . $x . ' to ' . $z . "\n";
37+
} else {
38+
HanoiGames($n - 1, $x, $z, $y);
39+
echo 'move disk ' . $n . ' from ' . $x . ' to ' . $z . "\n";
40+
HanoiGames($n - 1, $y, $x, $z);
41+
}
42+
}
43+
44+
HanoiGames(3, 'A', 'B', 'C');
45+
46+
// move disk 1 from A to C
47+
// move disk 2 from A to B
48+
// move disk 1 from C to B
49+
// move disk 3 from A to C
50+
// move disk 1 from B to A
51+
// move disk 2 from B to C
52+
// move disk 1 from A to C

package/Other/MonkeyKing.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,22 @@ function whoIsKing($n,$m){
7272
return $r+1;
7373
}
7474

75-
var_dump(whoIsKing(10,3));
75+
var_dump(whoIsKing(10,3));
76+
77+
function king($n, $m){
78+
$monkeys = range(1, $n);
79+
$i=0;
80+
$k=$n;
81+
while (count($monkeys)>1) {
82+
if(($i+1)%$m==0) {
83+
unset($monkeys[$i]);
84+
} else {
85+
array_push($monkeys,$monkeys[$i]);
86+
unset($monkeys[$i]);
87+
}
88+
$i++;
89+
}
90+
return current($monkeys);
91+
}
92+
$a = king(10, 3);
93+
var_dump($a);

package/Other/StealingApples.php

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,46 @@
11
<?php
2+
23
/**
3-
* ${NAME}
4+
* StealingApples
45
*
5-
* @author Pu ShaoWei <[email protected]>
6+
* @author Pu ShaoWei <[email protected]>
67
* @date 2017/8/26
78
* @license Mozilla
9+
* -------------------------------------------------------------
10+
* 思路分析:
11+
* -------------------------------------------------------------
12+
* 有5个人偷了一堆苹果,准备在第二天分赃。
13+
* 晚上,有一人遛出来,把所有苹果分成5份,但是多了一个,顺手把这个扔给树上的猴了,自己先拿1/5藏了。
14+
* 没想到其他四人也都是这么想的,都如第一个人一样分成5份把多的那一个扔给了猴,偷走了1/5。
15+
* 第二天,大家分赃,也是分成5份多一个扔给猴了。最后一人分了一份。
16+
* 问:共有多少苹果?N 个人呢?
817
*/
18+
19+
$i = 1;
20+
while (true) {
21+
if ($i % 5 == 1) {
22+
//第一个人取五分之一,还剩$t
23+
$t = $i - round($i / 5) - 1;
24+
if ($t % 5 == 1) {
25+
//第二个人取五分之一,还剩$r
26+
$r = $t - round($t / 5) - 1;
27+
if ($r % 5 == 1) {
28+
//第三个人取五分之一,还剩$s
29+
$s = $r - round($r / 5) - 1;
30+
if ($s % 5 == 1) {
31+
//第四个人取五分之一,还剩$x
32+
$x = $s - round($s / 5) - 1;
33+
if ($x % 5 == 1) {
34+
//第五个人取五分之一,还剩$y
35+
$y = $x - round($x / 5) - 1;
36+
if ($y % 5 == 1) {
37+
echo $i;
38+
break;
39+
}
40+
}
41+
}
42+
}
43+
}
44+
}
45+
$i++;
46+
}

0 commit comments

Comments
 (0)