<?php
//用面向对象的方法写 将猴子选大王实现 同样数3退1
class Monkey {
/**
* 定义猴子类
* 属性 编号 $id
* 左手 $left 表示的当前猴子左边的猴子
* 右手 $right 表示的当前猴子右边的猴子
*/
public $id;
public $left;
public $right;
}
class Circle{
/**
* 定义圈类
* 属性 猴子的总数 $ct
* 开始的猴子 $first
* 结束的猴子 $last
*/
public $ct = 0;
public $first;
public $last;
//构造方法创建圈
//参数是猴子的个数
function __construct($c){
for($i=0;$i<$c;$i++){
$this->add();
}
}
//猴子的添加方法
function add(){
$m = new Monkey();
$m->id = $this->ct;
if($this->ct==0){
$this->first = $m;
$this->last = $m;
$m->left = $m;
$m->right = $m;
}else{
$this->last->right = $m;
$m->left = $this->last;
$m->right = $this->first;
$this->first->left = $m;
$this->last = $m;
}
$this->ct++;
}
//猴子的删除方法
function del($m){
if($this->ct <=0){
return;
}else if($this->ct == 1){
$this->first = $this->last = null;
}else{
$m->left->right = $m->right;
$m->right->left = $m->left;
if($m == $this->first){
$this->first = $m->right;
}else if($m == $this->last){
$this->last = $m->left;
}
}
$this->ct--;
}
}
/*
这里的代码就是实现让500只猴子围城一圈然后
数三个退一个就这样直到还剩一个把那猴子的编号打印出来
*/
$circle = new Circle(500);
$number = 0;
$mk = $circle->first;
while($circle->ct > 1){
$number++;
if($number == 3){
$number = 0;
$circle->del($mk);
}
$mk = $mk->right;
}
echo $circle->first->id;
?>
详细解决方案
PHP数三退1面向对象的写法
热度:353 发布时间:2012-10-09 10:21:45.0
相关解决方案
- 关于“面向对象”的有关问题~请高手们指教
- java软件工程师学php -14. 面向对象
- js-面向对象(自个儿总结版)
- JS 面向对象 承继与重写
- JavaScript 学习札记十三 面向对象
- 关于 javascript 的 面向对象 有关问题 糊涂
- new GirlFriend() 吐槽 面向对象,该如何处理
- 面向对象,该如何解决
- 谈谈你对“面向对象”的高见?解决方案
- C#面向对象 类的打包
- php+mysql 面向对象 增删改查,该如何解决
- java软件工程师学php -14. 面向对象
- 面向对象:大夫与病人
- 数往知来C#面向对象〈3〉
- 二、C#面向对象:封装、继承、多态、String、集合、文件(上)
- 三、C#面向对象:封装、继承、多态、String、集合、文件(下)
- 一直没有搞明白[面向对象],帮忙看看这个算不算
- C#小小小结(面向对象)
- 1.面向对象
- Python入门基础第十五课--面向对象
- 【C#】面向对象(18)——C#面向对象知识点汇总
- 【C#】面向对象(15)——TextBox
- 【C#】面向对象(13)——第一个Windows程序,WinForm概念
- 【C#】面向对象(12)——索引器
- 【C#】面向对象(11)——命名空间
- 【C#】面向对象(10)——常量与静态成员
- 【C#】面向对象(9)——异常与异常处理
- 【C#】面向对象(8)——对象的隐式转换和显式转换
- 【C#】面向对象(7)——类的继承和组合
- 【C#】面向对象(6)——构造函数