版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
PHP工程師面試筆試分類模擬4
一、選擇題
1.取得搜索語句的結(jié)果集中的記錄總數(shù)的函數(shù)是______
A.mysql_fetchrow
B.mysql_rowid
C.mysqlnumrows
D.m(江南博哥)ysql_fetch_array
正確答案:C
[解析]對于選項(xiàng)A,mysql_fetch_row()函數(shù)的作用是從結(jié)果集中取得一行作為
數(shù)字?jǐn)?shù)組。選項(xiàng)A錯誤。
對于選項(xiàng)B,不存在mysql_rowid()函數(shù)。選項(xiàng)B錯誤。
對于選項(xiàng)C,mysql_nuni」ows()可以返回結(jié)果集中行的數(shù)目。選項(xiàng)C正
確。
對于選項(xiàng)D,mysql_fetch_array()函數(shù)從結(jié)果集中取得一行作為關(guān)聯(lián)數(shù)組
或數(shù)字?jǐn)?shù)組,或二者兼有。選項(xiàng)D錯誤。
所以,本題的答案為C。
2.當(dāng)PDO對象創(chuàng)建成功以后,與數(shù)據(jù)庫的連接己經(jīng)建立,就可以使用PDO對
象了,下面不是PDO對象中的成員方法的是_____
A.errorlnfoO
B.bindParcimO
C.exec()
D.prepare()
正確答案:B
[解析]bindParam是PDOStatement類的方法,其余是PDO類的方法
(PDOStatement也有errcrlnfo方法)。
errorinfo:從數(shù)據(jù)庫返回一個含有錯誤信息的數(shù)組,如果有的詬。
exec:執(zhí)行一條SQL語句并返回影響的行數(shù)。
prepare:為執(zhí)行準(zhǔn)備一條SQL語句。
所以,本題的答案為瓦
3.下面關(guān)于面向?qū)ο蟮拿枋鲋校e誤的是
A.父類的構(gòu)造函數(shù)與析構(gòu)函數(shù)不會自動被調(diào)用
B.成員變量需要用public、protected、private修飾,在定義變量時(shí)不再需要
var關(guān)鍵字
C.父類中定義的靜態(tài)成員,不可以在子類中直接調(diào)用
D.包含抽象方法的類必須為抽象類,抽象類不能被實(shí)例化
正確答案:A
[解析]對于選項(xiàng)A,子類繼承父類,如果子類沒有構(gòu)造函數(shù)和析構(gòu)函數(shù),那么
實(shí)例化子類時(shí)會自動調(diào)用父類的構(gòu)造函數(shù)和析構(gòu)函數(shù);但如果子類只有構(gòu)造函
數(shù)沒有析構(gòu)函數(shù),那么實(shí)例化子類時(shí),自動調(diào)用的是子類的構(gòu)造函數(shù),銷毀對
象時(shí)調(diào)用父類的析構(gòu)函數(shù);如果子類沒有構(gòu)造函數(shù)只有析構(gòu)函數(shù),那么實(shí)例化
子類時(shí)會自動調(diào)用父類的構(gòu)造函數(shù),銷毀對象時(shí)調(diào)用子類的析構(gòu)函數(shù)。選項(xiàng)A
說法不完全,選項(xiàng)A錯誤。
對于選項(xiàng)B,成員變量使用了public、protected、private修飾定義變量
時(shí)是不需要v”關(guān)鍵字的。選項(xiàng)B說法正確,選項(xiàng)B錯誤。
對于選項(xiàng)C,父類中的靜態(tài)成員,子類中是不可以直接訪問的。選項(xiàng)C說
法正確,選項(xiàng)C錯誤。
對于選項(xiàng)D,一個包含抽象方法的類必須是抽象類,并且抽象類不能被實(shí)
例化。選項(xiàng)D說法正確,選項(xiàng)D錯誤。
所以,本題的答案為A。
4.當(dāng)聲明函數(shù)時(shí),不能給參數(shù)賦默認(rèn)值的是
A.當(dāng)參數(shù)是布爾值時(shí)
B.當(dāng)函數(shù)是類中的成員時(shí)
C.當(dāng)參數(shù)是通過引用傳遞時(shí)
D.當(dāng)函數(shù)只有一個參數(shù)時(shí)
E.永遠(yuǎn)不會
正確答案:c
[解析]當(dāng)基數(shù)被聲明為通過引用傳遞時(shí),不能給它賦默認(rèn)值,此時(shí)解釋器期望
獲得一個能在函數(shù)內(nèi)部進(jìn)行修改的變量。選項(xiàng)c正確。
所以,本題的答案為C。
5.考慮如下數(shù)組,能從數(shù)組$111111宜_81任3丫中找出值cat的方法是
$multi_array=array(〃red〃,〃green〃,
42二〉〃blue",
〃1-1〃、/〃〃〃1〃
yellow=>array(apple,9=>pear,banana,
orange=>array(dog,cat,iguana))
);
A.$multi_array[,yellow']['apple*][0]
B.$multi_array[,blue,][0]['orange,][1]
C.$multi_array[3][3][2]
D.$multi_arrayyellow']['orange']['cat,]
E.$multi_arrayyellow']['orange'][1]
正確答橐:E
[解析]$multi_array數(shù)組是一個多維數(shù)組,值cat在orange數(shù)組中,鍵名
1,orange又在yellow,數(shù)組中,所以獲得cat值的方法應(yīng)該為
$multi_array[,yellow'][Jorange*][1]。選項(xiàng)E正確。
所以,本題的答案為E。
6.以下代碼的執(zhí)行結(jié)果為
<?php
$num="24thiz〃+6;
echo$IIUIII;
?>
A.30
B.24thiz6
C.6
D.30thiz
正確答案:A
[解析]$num被賦值為字符串“24thiz”與6相加,字符串會被轉(zhuǎn)換成整型,具
體的轉(zhuǎn)換有以下規(guī)則:①如果字符串以數(shù)字開頭且和字母(或符號)搭配,那么
會舍棄字母(或符號)部分直接轉(zhuǎn)換為開頭的數(shù)字,所以“24thiz”轉(zhuǎn)換得到
24;②如果是字符串開頭加數(shù)字,那么字符串轉(zhuǎn)換成整型得到的是0,例如,
“abcllO”得到的是0;③如果是數(shù)字0開頭或以數(shù)字0開頭和字母(或符號)搭
配的字符串,那么它們被轉(zhuǎn)換成整型時(shí)開頭的數(shù)字0是被舍棄的,例如,字符
串“05abc”和“05”轉(zhuǎn)換成數(shù)字時(shí)都是得到5。
對于本題而言,“24thiz”被轉(zhuǎn)換成整型得到24,最后$num=24+6得到結(jié)
果30。選項(xiàng)A正確。
所以,本題的答案為A。
7.在PHP中,總是包含所有總客戶端發(fā)出的Cookies數(shù)據(jù)的變量數(shù)組是
A.$_COOKIE
B.$COOKIES
C.$_GETCookie
D.$GETCookieS
if確答案:A
[解析]獲取客戶端發(fā)出的Cookies數(shù)據(jù)是通過$_C()OKIE方法進(jìn)行獲取的。
所以,本題的答案為A。
8.以下代碼能正確在瀏覽器中顯示圖片的是
A.<?php
$img=imagecreatefromjpeg(z,images/scce.jpg〃);
readfile("image.jpg〃);
?>
A.一張JPEG圖片
B.一個二進(jìn)制件
C.下載一個二進(jìn)制件
D.下載一張JPEG圖片
E.錯誤提示
正確答案:D
[解析]header("Content-type:image/jpeg〃)可以指定瀏覽器輸出一張圖片,
readfileO函數(shù)可以輸出文件。如果輸出文件成功,那么會輸出文件中讀入的
字節(jié)數(shù),如果輸出文件失敗,那么返回False。因?yàn)榇嬖趇mage,jpg文件,所以
會直接下載image,jpg圖片。選項(xiàng)D正確。
所以,本題的答案為D。
10.如果用+操作符把一個字符串和一個整型數(shù)字相加,那么結(jié)果是
A.解釋器輸出一個類型錯誤
B.字符串將被轉(zhuǎn)換成數(shù)字,再與整型數(shù)字相加
C.字符串將被丟棄,只保留整型數(shù)字
D.字符串和整型數(shù)字將連接成一個新字符串
E.整型數(shù)字將被丟棄,而保留字符串
正確答案:B
[解析]字潤串將被轉(zhuǎn)換成數(shù)字(如果無法發(fā)生轉(zhuǎn)換,那么就是0),然后與整型
數(shù)字相加。
所以,本題的答案為B。
二、填空題
1.語句echointval((0.7+0.1)*10);的打印結(jié)果為。
正確答案:
7
[解析]由于浮點(diǎn)數(shù)的精度是有限的,因此它在內(nèi)存中存儲的是一個近似值,而
不是準(zhǔn)確的值。對于((0.1+0.7)*10),在內(nèi)存中實(shí)際存儲的值為
7.999999....,當(dāng)通過intval把它轉(zhuǎn)換為整型的時(shí)候(向下取整),轉(zhuǎn)換的結(jié)果
就是7。正因?yàn)槿绱耍跅l件判斷的時(shí)候一般不能通過“二二”來比較兩個浮點(diǎn)數(shù)
是否相等。
2.從隊(duì)列數(shù)組隊(duì)頭刪除數(shù)據(jù)可以使用函數(shù)o
正確答案:
array_shift()
3.Nginx主要使用的網(wǎng)絡(luò)協(xié)議是、、、。
正確答案:
TCP/IP、HTTP、HTTPS、Webstocket等網(wǎng)絡(luò)協(xié)議
4.在PHP中,用來獲取瀏覽器屬性的方法是o
正確答案:
$_SERVER[,HTTP_USER_AGENT,]
5.執(zhí)行程序段V?phpecho8%(-2);?>將輸出。
正確答案:
0
[解析]因?yàn)?能夠被-2整除,所以,8對-2求余后輸出得到0。
三、簡答題
1.MySQL的索引都有哪些?
正確答案:
MySQL的索引如下:
1)唯一索引。唯一索引避免了表中存在重復(fù)的數(shù)據(jù),提高了檢索速度。創(chuàng)
建唯一索引的目的是避免表中插入重復(fù)的數(shù)據(jù),從而提高表的查詢速度。
2)普通索引。普通索引允許被索引的數(shù)據(jù)列包含重復(fù)的值。優(yōu)點(diǎn)如下:①
簡化MySQL對這個索引的管理工作,使工作更有效率;②MySQL會對新插入的數(shù)
據(jù)自動檢測是否有重復(fù)的值。
3)主索引。即主鍵索引,關(guān)鍵字PRIMARY。
4)外鍵索引。外鍵約束。
5)復(fù)合索引。索引可以覆蓋多列數(shù)據(jù),例如,INDEX(columnA,columnB)。
這種索引的特點(diǎn)是MySQL可以有選擇地使用索引,例如,INDEX(A,B,C)可以當(dāng)
作A或(A,B)的索引來使用,但不能當(dāng)作B或(B,C)來使用。
6)索引的長度。在為char和varchar類型的數(shù)據(jù)列定義索引時(shí),可以把
索引的長度限制為一個給定的字符個數(shù),這個數(shù)字必須小于這個字段所允許的
最大字符個數(shù)。
7)全文索引。針對內(nèi)容開頭的字符進(jìn)行檢索操作,如果檢索的內(nèi)容由多個
字段構(gòu)成,數(shù)據(jù)量很大,那么全文索引是必要的。注意,MySQL的InnoDB引擎
不支持全文搜索索引。
2.Session的運(yùn)行機(jī)制是什么?
正確答案:
Session是一種服務(wù)器端的機(jī)制,服務(wù)器使用一種類似于散列表的結(jié)構(gòu)(也可能
就是使用散列表)來保存信息。
當(dāng)程序需要為某個客戶端的請求創(chuàng)建一個Session的時(shí)候,服務(wù)器首先檢
查這個客戶端的請求里是否已包含了一個Session標(biāo)識SessionTD,如果已包含
一個SessionlD,則說明已經(jīng)為此客戶端創(chuàng)建Session,服務(wù)器就按照
SessionTD把這個Session檢索出來使用;如果客戶端請求不包含SessionTD,
則為此客戶端創(chuàng)建一個Session并且生成一個與此Session相關(guān)聯(lián)的
SessionlD,SessionlD的值應(yīng)該是一個既不會重復(fù),又不容易被找到規(guī)律以仿
造的字符串,這個SessionlD將被在本次響應(yīng)中返回給客戶端保存。
3.請簡單介紹什么是視圖。
正確答案:
視圖是A或據(jù)庫的基本表中選取出來的數(shù)據(jù)組成的邏輯窗口,它不同于基本
表,是一個虛表,在數(shù)據(jù)庫中,存放的只是視圖的定義而已,而不存放視圖包
含的數(shù)據(jù)項(xiàng),這些項(xiàng)目仍然存放在原來的基本表結(jié)構(gòu)中。
視圖的作用非常多,主要有以下幾點(diǎn):首先,可以簡化數(shù)據(jù)查詢語句;其
次,可以使用戶從多角度看待同一數(shù)據(jù);再次,通過引入視圖,可以提高數(shù)據(jù)
的安全性;最后,視圖提供了一定程度的邏輯獨(dú)立性等。
通過引入視圖機(jī)制,用戶可以將注意力集中在其關(guān)心的數(shù)據(jù)上而非全部數(shù)
據(jù),這樣就大大提高了用戶效率與用戶滿意度,而且如果這些數(shù)據(jù)來源于多個
基本表結(jié)構(gòu),或者數(shù)據(jù)不僅來自于基本表結(jié)構(gòu),還有一部分?jǐn)?shù)據(jù)來源于其他視
圖,并且搜索條件又比較復(fù)雜,那么需要編寫的查詢語句就會比較煩瑣,此時(shí)
定義視圖就可以使數(shù)據(jù)的查詢語句變得簡單可行。定義視圖可以將表與表之間
的復(fù)雜操作連接和搜索條件對用戶不可見,用戶只需要簡單地對一個視圖進(jìn)行
查詢即可,所以增加了數(shù)據(jù)的安全性,但是不能提高查詢的效率。
4.組合與繼承的區(qū)別是什么?
正確答案:
組合和繼承是面向?qū)ο笾袃煞N代碼復(fù)用的方式。組合是指在新類里面引用原有
類的對象,重復(fù)利用已有類的功能。繼承是面向?qū)ο蟮闹饕匦灾?,它允許
設(shè)計(jì)人員根據(jù)其他類的實(shí)現(xiàn)來定義一個類的實(shí)現(xiàn)。組合和繼承都允許在新的類
中設(shè)置子對象(subobject),只是組合是顯式的,而繼承則是隱式的。組合和繼
承存在著對應(yīng)關(guān)系:組合中的整體類和繼承中的子類對應(yīng),組合中的局部類和
繼承中的父類對應(yīng)。
二者的區(qū)別在哪里呢?首先分析一個實(shí)例。Car表示汽車對象,Vehicle表
示交通工具對象,Tire表示輪胎對象。三者的類關(guān)系如下圖所示。
從上圖中可以看出,Car是Vehicle的一種,因此是一種繼承關(guān)系(又被稱
為is-a關(guān)系);而Car包含了多個Tire,因此是一種組合關(guān)系(又被稱為has-a
關(guān)系)。其實(shí)現(xiàn)方式如下:
繼承組合
...,(classTire{
classvVerhicle{.
))
i八,,classCarextendsVerhicle{
classCarextendswVerhicletf?八
iqA>t=new1ire0;
5.什么是抽象類和接口?抽象類和接口有什么不同和相似的地方?
正確答案:
被關(guān)鍵字abstract修飾的類叫作抽象類,抽象類是不能被實(shí)例化的。被
abstract修飾的方法為抽象方法,一個類只要有一個抽象方法,這個類一定是
抽象類。
接口是通過關(guān)鍵字interface來定義的,可以指定某個類必須實(shí)現(xiàn)哪些方
法,但不需要定義這些方法的具體實(shí)現(xiàn)。PHP類只支持單重繼承,但通過接口可
以實(shí)現(xiàn)PHP類的多重繼承。
抽象類和接口的不同和相似的地方如下:
1)抽象類是一種不能被實(shí)例化的類,只能作為其他類的父類來使用。
2)抽象類是通過關(guān)鍵字abstract來聲明的。
3)抽象類與普通類相似,都包含成員變量和成員方法,兩者的區(qū)別在于,
抽象類中至少要包含一個抽象方法。
4)抽象方法沒有方法體,該方法大生就是要被子類重寫的。
5)抽象方法的格式為abstractfunctionabstractMethod();o
6)因?yàn)镻HP中只支持單重繼承,所以如果想實(shí)現(xiàn)多重繼承,那么就要使用
接口。也就是說,子類可以實(shí)現(xiàn)多個接口。
7)接口類是通過interface關(guān)鍵字來聲明的,接口類中的成員變量和方法
都是public的,可以不用顯式地使用public來修飾。
8)接口中的方法沒有方法體。接口中的方法天生就是要被子類繼承實(shí)現(xiàn)
的。
9)子類繼承抽象類使用extends關(guān)鍵字,子類實(shí)現(xiàn)接口使用implements
關(guān)鍵字。
四、編程題
1.翻轉(zhuǎn)(也叫顛倒)棧的所有元素,例如,輸入棧(1,2,3,4,5),其中,1
處在棧頂,翻轉(zhuǎn)之后的棧為(5,4,3,2,1),其中,5處在棧頂。
正確答案:
最容易想到的辦法是申請一個額外的隊(duì)列,先把棧中的元素依次出棧放到隊(duì)列
里,然后把隊(duì)列里的元素按照出隊(duì)列順序入棧,這樣就可以實(shí)現(xiàn)棧的翻轉(zhuǎn),這
種方法的缺點(diǎn)是需要申請額外的空間存儲隊(duì)列,因此,空間復(fù)雜度較高。下面
介紹一種空間復(fù)雜度較低的遞歸的方法。
遞歸程序有兩個關(guān)鍵因素需要注意:遞歸定義和遞歸終止條件。經(jīng)過分析
后,很容易得到該問題的遞歸定義和遞歸終止條件。遞歸定義:將當(dāng)前棧的最
底元素移到棧頂,其他元素順次下移一位,然后對不包含棧頂元素的子棧進(jìn)行
同樣的操作。終止條件:遞歸下去,直到棧為空。遞歸的調(diào)用過程如下圖所
zj\o
雌I:枝低元素移動到板項(xiàng)
榭午2:遞歸潮fl除檢頂元素的子根
-2
在上圖中,對于棧(1,2,3,4,5)進(jìn)行翻轉(zhuǎn)的操作:首先把棧底元素移
動到棧頂?shù)玫綏?5,1,2,3,4),然后對不包含棧頂元素的子棧進(jìn)行遞歸調(diào)用
(對子棧元素進(jìn)行翻轉(zhuǎn)),子棧(1,2,3,4)翻轉(zhuǎn)的結(jié)果為(4,3,2,1),因
此,最終得到翻轉(zhuǎn)后的棧為(5,4,3,2,Do
此外,由于棧的后進(jìn)先出的特點(diǎn),使得只能取棧頂?shù)脑兀虼?,要把?/p>
底的元素移動到棧頂也需要遞歸調(diào)用才能完成,主要思路:把不包含該棧頂元
素的子棧棧底的元素移動到子棧的棧頂,然后把棧頂?shù)脑嘏c子棧棧頂?shù)脑?/p>
(其實(shí)就是與棧頂相鄰的元素)進(jìn)行交換,如下圖所示。
遞歸調(diào)用
一返回子棧調(diào)用的結(jié)果并交換子棧的棧頂元素與棧頂元素一
為了容易理解遞歸調(diào)用,可以認(rèn)為在進(jìn)行遞歸調(diào)用的時(shí)候,子棧已經(jīng)實(shí)現(xiàn)
了把棧底元素移動到了棧項(xiàng),在上圖中為了把棧(1,2,3,4,5)的棧底元素5
移動到棧頂,首先對子棧(2,3,4,5)進(jìn)行遞歸調(diào)用,調(diào)用的結(jié)果為(5,2,
3,4),然后對子棧頂元素5,與棧頂元素1進(jìn)行交換,得到棧(5,1,2,3,
4),實(shí)現(xiàn)了把棧底元素移動到了棧頂。
示例代碼如下:
<?php
header(^content-type:text/html;charset=utf-8〃);
classLNode{
public$mElem;
public$mNext;
publicfunction_construct(){
$this->mElem=NULL;
$this->mNext=NULL;
)
}
classStackLinked{
〃頭“指針”,指向棧頂元素
public$mNext;
publicstatic$ml.ength;
/**
*初始化棧
*
*@returnvoid
*/
publicfunction_construct(){
$this->mNext=NULL;
self::$mLength=0;
}
/**
本判斷棧是否空棧
*
*@returnboolean如果為空棧返回true,否則返回false
*/
publicfunctiongetlsEmpty(){
if($this->mNext=NULL){
returntrue;
}else{
returnfalse;
)
)
/**
*將所有元素出棧
*
*?returnarray返回所有棧內(nèi)元素
*/
publicfunctiongetAHPopStackO{
$e=array();
if(!$this->getIsEmpty()){
while($this->mNext!=NULL){
$e[]=$this->mNext->mElem;
$this->mNext=$this->mNext->mNext;
)
}
self::$mLength=0;
return$e;
}
/**
*返回棧內(nèi)元素個數(shù)
*
*?returnint
*/
publicstaticfunctiongetLengthO{
returnself::$mLength;
/**
*元素進(jìn)棧
*
mixed$e進(jìn)棧元素值
*@returnboolean進(jìn)棧成功返回true
**/
publicfunctionpush($e){
$newLn=newLNode();
$newLn->mElem=$e;
$newLn->mNext=$this->mNext;
$this->mNext=&$newLn;
self:;$mLength++;
returntrue;
)
/**
*元素出棧
*
*?returnboolean出棧成功返回true,否則返回false
**/
publicfunctionpop(){
if($this->getIsEmpty()){
returnfalse;
)
$p=$this->mNext;
$e=$p->mElem;
$this->mNcxt=$p->mNext;
self::$mLength—;
returntrue;
)
/**
*返回棧內(nèi)所有元素
*
*@returnarray棧內(nèi)所有元素組成的一個數(shù)組
*/
publicfunctiongetAllElemO(
$sldata=array();
if(!$this->getIsEmpty()){
$p=$this->mNext;
while($p!=NULL){
$sldata[]=$p->mElem;
$p=$p->mNext;
}
return$sldata;
)
}
/*
*返回棧頂元素一
*?return$element返回棧頂元素
*/
publicfunctiontop()
(
if($this->getIsEmpty()){
returnfalse;
)
$list=$this->getAllElemO;
$element=$list[0];
return$element;
}
/*
**函數(shù)功能:把棧底元素移動到棧頂
*/
publicfunctionir.ove_bottom_to_top()
{-
if($this->getIsEmpty())
return;
$topl=$this->top();
$this->pop();〃彈出棧頂元素
if(!$this->getIsEmpty()){
〃遞歸處理不包含棧頂元素的子棧
$this->movebottomtotop();
$top2=$this->top();
$this->pop();
〃交換棧頂元素與子棧棧頂元素
$this->push($topl);
$this->push($top2);
}else{
$this->push($topl);
}
}
publicfunulionleverseslack()
{"
if($this->getIsEmpty())
return;
〃把棧底元素移動到棧頂
$this->move_bottom_to_top();
$top=$this->top();
$this->pop();
〃遞歸處理子棧
$this->reverse_stack();
$this->push($top);
}
)
$stack=newStackLinked();
$stack->push('5');
$stack->push('4');
$stack->push('3');
$stack->push(,2');
$stack->push(,T);
$stack->reverse_stack();
echo〃翻轉(zhuǎn)后的出彩順序?yàn)?〃;
while(!$stack->getIsEmpty())
(
echo$stack->top()."“;
$stack->pop();
)
?>
程序的運(yùn)行結(jié)果為
翻轉(zhuǎn)后的出棧順序?yàn)椋?4321
算法性能分析:把棧底元素移動到棧頂操作的時(shí)間復(fù)雜度為0(n),在翻轉(zhuǎn)
操作中對每個子棧都進(jìn)行了把棧底元素移動到棧頂?shù)牟僮?,因此,翻轉(zhuǎn)算法的
時(shí)間復(fù)雜度為0(22)。
2.已知隨機(jī)數(shù)生成函數(shù)rand7()能產(chǎn)生的隨機(jī)數(shù)是整數(shù)1?7的均勻分布,如
何構(gòu)造rand10()函數(shù),使其產(chǎn)生的隨機(jī)數(shù)是整數(shù)1?10的均勻分布。
正確答案:
<?php
〃產(chǎn)生的隨機(jī)數(shù)是整數(shù)1?7的均勻分布
fundioniand7()
{
returnrand()%7+l;
}
〃產(chǎn)生的隨機(jī)數(shù)是整數(shù)1?10的均勻分布
functionrandlO()
{
$x=0;
do
(
$x=(rand7()T)*7+rand7();
}while($x>40);
return$x%10+l;
}
for($i=0;$i!=10;++$i)
printfrand10());
printf(〃\n〃);
?>
程序的運(yùn)行結(jié)果為
610818638107
[解析]要保證randlOO產(chǎn)生的隨機(jī)數(shù)是整數(shù)1?10的均勻分布,可以構(gòu)造一個
1?10*n的均勻分布的隨機(jī)整數(shù)區(qū)間(n為任何正整數(shù))。假設(shè)x是這個1?10*n
區(qū)間上的一個隨機(jī)數(shù),那么x%10+l就是均勻分布在1?10區(qū)間上的整數(shù)。
根據(jù)題意,rand7()函數(shù)返回1?7的隨機(jī)數(shù),那么rand7()-l則得到一個
離散整數(shù)集合,該集合為{0,1,2,3,4,5,6),集合中每個整數(shù)的出現(xiàn)概率
都為1/7。那么(rand7()T)*7得到另一個離散整數(shù)集合A,該集合元素為7的
整數(shù)倍,即A={0,7,14,21,28,35,42),其中,每個整數(shù)的出現(xiàn)概率也都
為1/7。而由于rand7()得到的集合B={1,2,3,4,5,6,7),其中每個整數(shù)
出現(xiàn)的概率也為1/70顯然集合A與集合B中任何兩個元素和組合可以與1?49
之間的一個整數(shù)一一對應(yīng),即1?49之間的任何一個數(shù),可以唯一地確定A和B
中兩個元素的一種組合方式,這個結(jié)論反過來也成立。由于集合A和集合B中
元素可以看成是獨(dú)立事件,根據(jù)獨(dú)立事件的概率公式P(AB)=P(A)P(B),得到每
個組合的概率是1/7*1/7=1/49。因此,(rand7()-l)*7+rand7()生成的整數(shù)均勻
分布在1?49之間,而且,每個數(shù)的概率都是1/49。
所以,(rand7()T)*7+rand7()可以構(gòu)造出均勻分布在1?49的隨機(jī)數(shù),
為了將49種組合映射為1?10之間的10種隨機(jī)數(shù),就需要進(jìn)行截?cái)?即將
41?49這樣的隨機(jī)數(shù)剔除掉,得到的數(shù)1?40仍然是均勻分布在1?40的,這
是因?yàn)槊總€數(shù)都可以看成一個獨(dú)立事件。由1?40區(qū)間上的一個隨機(jī)數(shù)x,可以
得到x%10+l就是均勻分布在1-10區(qū)間上的整數(shù)。
3.公雞5文錢1只,母雞3文錢1只,小雞1文錢買3只,現(xiàn)在用100文錢
共買了100只雞,問:在這100只雞中,公雞、母雞和小雞各是多少只?(設(shè)每
種至少一只)
正確答案:
根據(jù)百錢買百雞的要求,可以設(shè)有$1只公雞,$上只母雞,$1<只小雞,并且
$i+$j+$k的總數(shù)為100,$i*5+$j*3+$k*l總價(jià)為100。依次對公雞、母雞、小
雞的總數(shù)循環(huán)求解出符合這兩個公式的最優(yōu)解。
實(shí)現(xiàn)代碼如下:
<?php
header(''Content-type:text/html;charset=utf-8〃);
for($i=l,$i<100;$i++){
for($j=l,$J<100;$j++){
for($k=l;$k<100;$k++){
if(($i+$j+$k==100)&&($i*5+$j*3+$k/3==100)){
echo〃公雞:〃.$i,'只,母雞:‘,$j,'只,小雞:,$k,'只Vbr>';
)
}
)
}
?>
程序的運(yùn)行結(jié)果為
公雞:4只,母雞:18只,小雞:78只
公雞:8只,母雞:11只,小雞:81只
公雞:12只,母雞:4只,小雞:84只
4.己知兩個鏈表headl和head2各自有序(例如升序排列),請把它們合并成
一個鏈表,要求合并后的鏈表依然有序。
正確答案:
分別用指針headl、head2來遍歷兩個鏈表,如果當(dāng)前headl指向的數(shù)據(jù)小于
head2指向的數(shù)據(jù),則將headl指向的結(jié)點(diǎn)歸入合并后的鏈表中,否則,將
head2指向的結(jié)點(diǎn)歸入合并后的鏈表中。如果有一個鏈表遍歷結(jié)束,則把未結(jié)束
的鏈表連接到合并后的鏈表尾部。
下圖以一個簡單的示例來介紹合并的具體方法。
head
headI
head?
由于鏈表按升序排列,首先通過比較鏈表第一個結(jié)點(diǎn)中元素的大小來確定
最終合并后鏈表的頭結(jié)點(diǎn);接下來每次都找兩個鏈表中剩余結(jié)點(diǎn)的最小值鏈接
到被合并的鏈表后面,如上圖中的虛線所示。在實(shí)現(xiàn)的時(shí)候需要注意,要釋放
head2鏈表的頭結(jié)點(diǎn),具體實(shí)現(xiàn)代碼如下:
<?php
〃鏈表結(jié)點(diǎn)
classnode(
public$id;
〃結(jié)點(diǎn)id
public$data;
〃結(jié)點(diǎn)名稱
public$next;
〃下一結(jié)點(diǎn)
publicfunction_construct($id,$data){
$this->id=$id;
$this->data=$data;
$this->next=null;
)
}
〃單鏈表
classlinkList{
public$header;
〃鏈表頭結(jié)點(diǎn)
〃構(gòu)造方法
publicfunction___construct($id=null,$data=null){
$this->header=newnode($id,$data,null);
)
〃添加結(jié)點(diǎn)數(shù)據(jù)
publicfunctionaddLink($node){
$current=$this->header;
while($current->next!=nul1){
if($cuiieiil->nexl->id>$node->id){
break;
)
$current=$current->next;
}
$node->next=$current->next;
$current->next=$node;
)
〃刪除鏈表結(jié)點(diǎn)
publicfunctionfree($id){
$current=$this->headcr;
$flag'false;
while($current->next!=nul1){
//echo$current->next->id.z,---〃?$id.〃Vbr>〃;
if($current->next->id==$id){
$flag=true;
break;
)
$current=$current->next;
)
if($flag){
$current->next=$current->next->next;
}else{
echo”未找到id二”.$id."的結(jié)點(diǎn)!<br>";
)
)
〃清空鏈表
publicfunctionclear(){
$this->header=null;
〃獲取鏈表
publicfunctiongetLinkList(){
$current=$this->header;
if($current->next==null){
echo(〃鏈表為空!〃);
return;
}
while($current->next!=null){
echo$uurieiil->nexl->clala.〃;
if($current->next->next==null){
break;
}
$current=$current->next;
)
}
)
/*
*合并兩個鏈表
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 形容詞副詞復(fù)習(xí)公開課獲獎百校聯(lián)賽教案
- 感恩父母綜合實(shí)踐活動教案
- 敢峰要做教育家型的校長知識教案(2025-2026學(xué)年)
- 七年級語文上冊期中測評習(xí)題新人教版教案
- 人教版高中物理必修二能量守恒定律能源教案
- 物體的位置復(fù)習(xí)教案
- 醫(yī)學(xué)ICU鎮(zhèn)痛鎮(zhèn)靜指南教案
- 構(gòu)造地貌的形成教師版高二地理人教版選擇性必修教案
- 輪胎特性在整車開發(fā)中的作用要求教案
- 髕骨脫位半脫位教案(2025-2026學(xué)年)
- 臨床麻醉的經(jīng)驗(yàn)與教訓(xùn)化險(xiǎn)為夷的80個病例
- 口腔正畸學(xué)課件
- 血常規(guī)報(bào)告單模板
- 物聯(lián)網(wǎng)就在身邊初識物聯(lián)網(wǎng)課件
- 路基拼接技術(shù)施工方案
- 宏觀經(jīng)濟(jì)學(xué)PPT完整全套教學(xué)課件
- 陜09J02 屋面標(biāo)準(zhǔn)圖集
- 2023年上海清算登記托管結(jié)算試題試題
- 動車組受電弓故障分析及改進(jìn)探討
- GB/T 41932-2022塑料斷裂韌性(GIC和KIC)的測定線彈性斷裂力學(xué)(LEFM)法
- 2023年浙江省大學(xué)生物理競賽試卷
評論
0/150
提交評論