循环break,continue 进制

/** 
燕十八 公益PHP培训 
课堂地址:YY频道88354001 
学习社区:www.zixue.it 
**/

 

// 顺序结构
/*
按顺序执行,
*


// 分支结构
// if ,单路分支
// if /else ,双路分支, 双路分支中,if/else中的2个代码段,必有且只有一段被执行.
// if /else if /else if .../ else 多路分支.


// switch case ,用来比较被判断的变量的多种可能值时便于用.


// while循环,
/*
while(表达式) {
代码段
}

表达式为真,就执行代码段,
执行完代码段,再回去判断表达式.
为真,.....

直到表达式为假的时候,结束循环


do {
代码段
}while(表达式);

先执行代码段,再判断表达式的真假

// do/while 至少执行一次.


for(语句1;语句2;语句4) {
语句3;
}

语句1, 先执行,且只执行1次.

然后 语句2 判断,如为真,则执行语句3,然后执行语句4

语句2判断..... 循环

直到语句2为假,for结束


*/

// break, continue

/*****

break

已知,教室内,有一个犯罪分子, 警察过来抓他.
犯罪分子隐藏的很好,只好一个人一个的来检查.
看他脚心有没有一颗痣.

张三[检查]
李四[检查]
王五[检查]
罪犯[抓捕活动结束,后面的不查了]
赵六
郑七
王八

*****/


for($i = 1;$i<10;$i++) {
if($i == 6) {
break;
} else {
echo $i,'<br />';
}
}

// 先别运行,思考打印结果: 1 2 3 4 5

 

// break 与 抓罪犯,
// break有破坏的意思,直接破坏整个循环语句,不再往下执行了.

 

// continue 继续

/***
已知,地铁口,有10个人,警察来查身份证.
一个人一个的来检查.

张三[检查]
李四[检查]

王五(哎哟,这不是刚子吗?连我都不认识了,邻居.
(警察认识王五,因此,王五就不检查了.继续检查下一位)
赵六
郑七
王八

***/

 

for($i = 1;$i<10;$i++) {
echo $i,'<br />';
}

// 1 2 3 4 5 6 7 8 9

for($i = 1;$i<10;$i++) {
if($i == 5) {
continue;
}
echo $i,'<br />';
}


// continue是继续的意思,是说你继续下一次循环单元吧,这次的可以跳过了.

 

/*
假设某人有100,000现金。每经过一次路口需要进行一次交费。
交费规则为当他现金大于50,000时每次需要交5%如果现金小于等于50,000时每次交5,000。
请写一程序计算此人可以经过多少次这个路口。

分析:给此人100 000元,初始条件.

判断条件: 钱至少>=5000

过路口:钱减少

*/

/**
for($money = 100000,$num=0;$money >= 5000;$num++) {
if($money > 50000) {
$money *= 0.95; // 扣了5%,即原来的0.95倍
} else {
$money -= 5000;
}
}

echo $num;
**/

for($money = 100000,$num=0;$money >= 5000;) { // 看此处,第2个";"号后竟然是空的??
if($money > 50000) {
$money *= 0.95; // 扣了5%,即原来的0.95倍
} else {
$money -= 5000;
}

$num += 1; // 把过桥记录加1
echo '第',$num,'次过桥后,剩余,',$money,'元<br />';
}

 

// 最简单的for循环
for(;;) {
echo 'haha';
} // 别运行,死循环了.

 

/***
之前碰到的一些怪事:
023的显示问题
二进制的问题
16进制面试题的问题.

药死小白鼠的问题.

如上,给我带来的疑惑,都是因为进制的问题.

***/

 

// 李开复在一个节目出的题

/***
某珠宝商,有31颗明月珍珠,光芒夺目
此商人呢,把珍珠分成了若干盒,每盒的珠子数量都不一样


分完后,发现特别的巧,
你想买1-31颗之间的珠子,
此商人 ,都能正好取出其中若干盒,正好能组成你要买的数量.

思路: 分成了几盒? 每盒又各是多少颗珠子呢?

8瓶水,1瓶有毒, 药死小老鼠,需要2小时时间.
只给你2小时时间,
问:最少,需要几只老鼠

***/

/****
日常生活 数数
1 2 3 4 5 6 7 8 9

10
[左数第2位的1,代表10个]

30
[左数第2位,1个值代表10]
同样的一个数字, 在不同的位置上,发挥的"重量"是不一样的.
有句广告词: 一片顶五片

1--> 1
10 --> 1代表10
100---> 1 代表 100

用术语来说:在不同位置上,发挥的"重量" ,叫"权值"

以10进制为例
1234 = 1000 + 200 + 30 + 4
因为
左数第4位的1,权值是1000,即以1顶1000,基数又是1,因此顶1000
左数第3位的2,权值是100, 即以1顶100,基数又是2, 因此顶200
左数第2位的3,权值是10, 即以1顶10, 基数又是3,因此顶30
左数第1位的4,权值是1, 即以1顶1, 基数又是4, 因此顶4
所以值 1000 + 200 + 30 + 4;


继续归纳:
左数第1位,权值是1, 10^0 ,10的0次方
左数第2位,权值是10, 10^1,
左数第3位,权值是100, 10^2
左数第4位,权值是1000,10^3


那么同学们回答,
(abcdef)10, 即10进制的abcdef的值是多少?
f*10^0 + e*10^1 + d*10^2 + c*10^3 + b*10^4 + a *10^5


归纳:
在10进制中,基数最大是9,因为到10,就把基数1进到第2位,来表示了.
0 1 2 3 4 5 6 7 8 9

扩展: 在M进制中, 基数的最大值是 M-1


来个8进制练一练
(abcd)8 , 即8进制的abcd值是多少?

(1234)8
左数第1位,权值是8^0, 基数*权值 = 4 * 8^0
左数第2位,权值是8^1, 基数*权值 = 3 * 8^1
左数第3位,权值是8^2, 基数*权值 = 2 * 8^2
左数第4位,权值是8^3, 基数*权值 = 1 * 8^3

计算出来,对应10进制是

4 * 1 + 3 * 8 + 2 * 64 + 1 * 512 = 668;

****/


echo 1234,'<br />'; // 10进制的1234

 

// 如果你想告诉PHP,你用的是8进制,请在数字前加0
echo 01234,'<br />';


echo 023,'<br />';


/*
在下面的这个例子,
前面加0代表8进制
而8进制,基数最大是7
现在出了一个9,自然就是"违法的"

碰到这种情况,PHP就会从9开始,把后面的值舍弃.
*/
echo 0239999,'<br />';

 

 

/*
看一看16进制
碰到16才进位,0-15都是单个的基数来表示
0 --------------------------->15
0 1 2 3 4 5 6 7 8 9 a b c d e f

ab(16)
左数第1位, 权值是16^0,基数是b,值是 b * 16^0
左数第2位, 权值是16^1,基数是a,值是 a * 16^`

因此 == b * 16^0 + a * 16^1

24(16) = 4*16^0 + 2*16^1 = 4 + 32 = 36
*/


// 如何告诉计算机这是16进制呢?
// 在前面加0x

$age = 0x1c;
echo $age;

 

/***********
程序员的冷笑话
程序员分不清 圣诞节,和万圣节


圣诞节: 12月25日, dec25
万圣节: 10月31日, oct31


在英语里,常常这么缩写进制
Binary :二进制数 10010100B
Decimal:十进制数 148D(可省略)
Octonary:八进制数 224O或Q
HexaDecimal :十六进制数 94H


在程序员眼里
dec25 ---> 10进制25
oct31 ---> 8进制31

25dec === 31oct
(25)10 === (31)8

************/

 

// 2进制, 自然基数只能是1,0两个

/*
1101 ===>
从左到右 代表

1*2^0 + 0*2^1 + 1*2^2 + 1*2^3 = 1 + 0 + 4 + 8 = 13

*/

// 如何在PHP中表示2进制
// 在PHP5.4中,已经开始引进二进制的直接表示
echo PHP_VERSION;


/**

某珠宝商,有31颗明月珍珠,光芒夺目
此商人呢,把珍珠分成了若干盒,每盒的珠子数量都不一样


分完后,发现特别的巧,
你想买1-31颗之间的珠子,
此商人 ,都能正好取出其中若干盒,正好能组成你要买的数量.

思路: 分成了几盒? 每盒又各是多少颗珠子呢?

 

分析: 计算机中,有一门很重要的课,叫信息论.
一种东西,他的状态,能用来标识信息.
比如:一只眼睛, 能闭,能睁

想用来表示心情,最多能表示分种?
答:2种. 因为眼睛只有2种"态位"

如果有2只眼睛的话,每只眼睛都能睁能闭,

组合起来,就能表示4种心情.

比如:
左开右开
左开右闭
左闭右开
左闭右闭
**/

/**
关键在这句话:
"正好取出其中若干盒"

那么每盒有几种状态?
答:2种,要么取,要么不取.
一个盒就能表示两种"态位"
不妨标记为取:1, 不取:0

只能表示2进制,如下
[1/0][1/0][1/0][1/0][1/0]

如果用二进制的知识来分析
左数第1盒, 权值是 1
左数第2盒, 权值是 2
左数第3盒, 权值是 4
左数第4盒, 权值是 8
左数第5盒, 权值是 16

 

17 = 10001 ,取第5盒+第1盒
29 = 11101 ,取第5,4,3,1盒

**/

 


/**
8瓶水,其中1瓶有毒, 拿小白鼠做试验,
药效发挥需要2小时时间,才能让白鼠死.
只给你2小时时间,
问:最少,需要几只老鼠

分析:
毒死需要2个小时,只给2个小时==>只能试1次.


分析: 2小时后,小白鼠,只有2种状态: 死/活

2只小白鼠,则有4种组合的状态.
N只小白鼠,则有2^N次组合的状态.


一共只有8只老鼠,最多需要8种状态,就能区分.
3只老鼠,组合8种状态.
因此,从理论上说, 3只老鼠足够了.


但3只老鼠如何试出来,自己用二进制的知识来组合一下.

**/

 

/****

有个商人不小心把40磅的砝码摔碎了,摔成了4块,
欲哭无泪时发现这4块砝码恰好可以组合成1-40的任意重量,
求这4块碎砝码的质量。
提示:组合的意思就不是单纯相加。
因为天平,你懂的。例如:2=3-1

 

N块砝码,一个天平,

某一砝码可以放左边,也可以放右边,也可以不放.

一个砝码表示 3种态位.

可标识为 0 1 2
[0/1/2][0/1/2][0/1/2][0/1/2]


以上可以组合出一个3进制数字来
想表示出连续的数字来,

然后,每个位上的权值,也要符合3进制的规律

权值是 1, 3,9, 27


1-->1
2-->3-1
3-->3
4-->3+1
5-->9-3-1

....

...
...


****/

/****
提示:
对于进制的学习,
如果没懂,不要太担心.


但要知道1: 有2进制 8进制,10进制,16进制

也要知道2:
在程序中,往往是数字前加0代表8进制
在数字前面加0X代表16进制.


****/

posted on 2012-09-26 15:54  besile  阅读(349)  评论(0)    收藏  举报