第六章习题练习
?
前情提要:
007有危險(xiǎn)啦!這次讓我們來(lái)一次拯救吧!
回顧題目(推眼鏡,假裝柯南附身):
思路:
這道題目需要朋友們非常的細(xì)致,因?yàn)榭煽紤]的情況有很多。例如:①第一次就可以直接跳到岸上;②第一次跳到鱷魚(yú)之后就可以跳到岸上;③跳完鱷魚(yú)之后還得跳鱷魚(yú)。
面對(duì)這幾種情況,我們可分別列出判斷條件:①D>=50-7.5 ②D>= 50-| x | ?|| D>= 50-| y | ③D*D?>= (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)
這就初步提醒我們要構(gòu)建至少三個(gè)函數(shù)啦!
解題
OK,有了思路之后就讓我們順藤摸瓜、快樂(lè)地解題吧:
①自然是少不了我們的定義啦:
#include<iostream> using namespace std; #define MAXSIZE 100 #define YES 1 #define NO 0 int D; int N; //007一次能跳躍的距離 int Visited[MAXSIZE]; //標(biāo)記矩陣 void setVisit() //初始化標(biāo)記矩陣 {for(int i=0;i<MAXSIZE;i++)Visited[i]=0; } struct Point //存儲(chǔ)鱷魚(yú)的坐標(biāo) {int x;int y; }Point[MAXSIZE];?
②三種情況也要登場(chǎng)咯:
int straight(int D)//判斷能否一次性跳到岸邊 {if(D>=50-7.5)return YES;else return NO; } int FirstJump(int i) //第一次從小島跳到鱷魚(yú)頭上 {int x=Point[i].x;int y=Point[i].y;if((D+7.5)*(D+7.5)>=(x*x+y*y))return YES;else return NO; } int Jump(int i,int j) //判斷能否從一只鱷魚(yú)跳到另一只鱷魚(yú)頭上 {int x1=Point[i].x;int y1=Point[i].y;int x2=Point[j].x;int y2=Point[j].y;if(D*D>=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))return YES;else return NO; } int IsSafe(int i) //判斷能否從鱷魚(yú)跳到岸上 {int x=Point[i].x;int y=Point[i].y;if(x<0)x=-x;if(y<0)y=-y;if(D>=50-x||D>=50-y)return YES;else return NO; }③可別忘了,三種情況都是為了解救007服務(wù)的,所以我們需要有個(gè)小總結(jié)函數(shù),即真正解救007的關(guān)鍵函數(shù):
int DFS(int i) {int answer;Visited[i]=true;if(IsSafe(i)) answer=YES;else{ //循環(huán)遍歷每個(gè)節(jié)點(diǎn)for(int j=0;j<N;j++){ //如果該節(jié)點(diǎn)未被訪問(wèn),且能從j結(jié)點(diǎn)跳至j結(jié)點(diǎn)if(!Visited[j]&&Jump(i,j)){answer=DFS(j);if(answer==YES) break;}}}return answer; } void Save007() {int answer;setVisit(); //初始化標(biāo)記矩陣for(int i=0;i<N;i++){if(!Visited[i]&&FirstJump(i))answer=DFS(i);if(answer==YES) break;}if(answer==YES)cout<<"Yes";elsecout<<"No"; }④嘿嘿,是不是很期待main函數(shù)呢:
int main(){cin>>N;cin>>D;for(int i=0;i<N;i++){cin>>Point[i].x;cin>>Point[i].y;}Save007();return 0; }That's all!這道題就解決啦。還是那句老話:拿到題目,冷靜分析,理清思路,逐項(xiàng)突破。代碼題就像一只只小鱷魚(yú),別怕,不兇的。多跳跳既好玩又鍛煉能力。放心吧,總有一天,會(huì)上岸的。
反思:
最大的檢討就是上次沒(méi)能參加數(shù)據(jù)結(jié)構(gòu)小測(cè)!!!因?yàn)橛幸o事要外出,就沒(méi)能趕上,啊,我也不知道怎么說(shuō)了,只能哭戚戚... 沒(méi)關(guān)系,明天剛好還有一次小測(cè),是檢測(cè)圖的內(nèi)容。因?yàn)橹澳羌o事耽誤了一些課程,也因?yàn)閳D比較復(fù)雜吧,感覺(jué)圖的知識(shí)學(xué)得不十分好。但是!我會(huì)盡力的!嘿嘿,期待明天的表現(xiàn)吧~?
上次忘記寫(xiě)目標(biāo)了,其實(shí)目標(biāo)在我心里呢,是要把之前耽誤的一些課程給趕上。因?yàn)槊Φ竭@星期,所以目標(biāo)只完成了估摸著一半(嚴(yán)厲批評(píng)!)。我不想看到自己變成落下課業(yè)的孩子啊,所以這星期的目標(biāo)是把之前沒(méi)補(bǔ)完的知識(shí)點(diǎn)補(bǔ)上(在周三前完成),星期一的小測(cè)得認(rèn)認(rèn)真真準(zhǔn)備、認(rèn)認(rèn)真真考。PTA上第六章的作業(yè)和實(shí)踐得在星期四完成,星期五得把這章的知識(shí)點(diǎn)做系統(tǒng)的總結(jié)(這應(yīng)該在這周末完成的,可是因?yàn)樯闲瞧谌蝿?wù)的延遲,只能這樣盡快補(bǔ)了)。星期六早晨預(yù)習(xí)新課內(nèi)容,中午列期末復(fù)習(xí)計(jì)劃,下午開(kāi)始就一定一定得進(jìn)入期末復(fù)習(xí)階段啦(如果想在期末考高分,就必須得這樣做)!我喜歡很充實(shí)的生活,我不嫌忙的,適當(dāng)?shù)拿ψ屛腋械交钪c快樂(lè)。
這次就到這里啦,各位回見(jiàn)!
?
轉(zhuǎn)載于:https://www.cnblogs.com/Haylie/p/10891334.html
總結(jié)
- 上一篇: 站在K2角度审视流程--任务的独占与释放
- 下一篇: weak password