<?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;
?>
分享到:
相关推荐
一个java 面向对象字符串写法的判断回文数 假如输入非数字 会提示输入数字 利用循环写的 大家多多支持
Moo-CSS 模块化面向对象的css写法
面向对象写的一个点击选项卡,复用这个面向对象写法,同时为不同的添加不一样的方法
高级面向对象写法[收集].pdf
原生js实现无缝轮播(包括面向对象的写法),包括实现思路。
约瑟夫问题面向对象解法报告书(C++版)pdf格式
Python GUI编程(第一部分) 4_GUI程序的经典面向对象写法.mp4
本文归纳了js面向对象的几种常见写法,分享给大家供大家参考,具体内容如下 1.工厂方式 var Circle = function() { var obj = new Object(); obj.PI = 3.14159; obj.area = function( r ) { return this.PI * ...
全面介绍ALV面向对象的写法,在此基础上可以轻松的进入ABAP面向对象方法的研究上来
写选项卡的时候,要改变为面向对象的写法,面向兑现的写法更容易扩展或者维护,这里是文章的Markdown文档,需要的可以下载浏览,如有错误,欢迎指出 谢谢
面向过程: 为了把大象装进冰箱,需要3个过程。 1) 把冰箱门打开(得到打开门的冰箱) 2) 把大象装进去(打开门后,得到里面装着大象的冰箱) 3) 把冰箱门关上(打开门、装好大象后,获得关好门的冰箱) 每个过程有...
JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单...
JavaScript面向对象基础PPT,讲述了何谓面向对象、面向对象特点、组成及写法、工厂模式、原型以及如何将普通面向过程的代码转换为面向对象的基本原则
[易语言源码]-组件型对象源码写法
利用深度学习的方法进行手写数字的识别,识别率高达99+
1、类的定义,其中 CLASS() 是 lw_oopc_kc.h 中定义的宏 #include "lw_oopc_kc.h" CLASS(A) { int a; void(*init)(void*,int); void(*put)(void*); }; 2、成员函数的实现 类的封装实质是用...
使用面向对象方法写的一个拖拽,可以先用过程式的写法先写出来然后再改成面向对象。我只是一个菜比.....
NULL 博文链接:https://llying.iteye.com/blog/341552
1、3亿以内数的写法.ppt