貓吃老鼠問題

2021-05-22 06:58:30 字數 1353 閱讀 6361

今天在看雪看到這個「貓吃老鼠問題」的帖子,和當初學程式設計時的乙個叫做「約瑟夫環問題」類似。

自己按照數學的方法分析了一下,得到乙個數學演算法。

問題描述:

現有n個老鼠圍成一圓圈,有乙隻貓從任意位置開始吃老鼠,每次都隔乙個老鼠吃,請給出最後乙個老鼠的編號?題目要求是任給老鼠數n,輸出貓最後吃的老鼠的編號。

數學演算法

//若從1號算起

int total = 1;

int seed = 1;

printf("老鼠個數?/n");

scanf("%d",&total);

while(seed < total) seed<<=1;

printf("最後乙個吃掉的是:%d/n",2*total-seed);

若從任意號算起,只要在此基礎上加入乙個計算偏移量的**即可。

分析圖示:

11:01

12:0212

23:0212

324:0412

3424

45:0212

3452

426:0412

3456

2464

7:0612

3456

7246

2668:0812

3456

7824

6848

89:0212

3456

7892

4682

6210:0412

3456

78910

2468

10484

11:0612

3456

78910

11246

81026

10612:0812

3456

78910

111224

68101248

12813:1012

3456

78910

1112132

46810

122610

2101014:1212

3456

78910

1112

131424

681012144

812412

1215:1412

3456

78910

1112

1314152

46810

121426

1014614

1416:1612

3456

78910

1112

1314

151624

681012

141648

1216816

16

貓吃老鼠演算法

曾經一道面試題,大概意思是 有乙隻很強大的貓咪,喜歡把抓來的n只老鼠們排成乙個佇列,然後設乙個步長值k,先吃掉第一隻後,再每隔k只再吃,吃完一輪後再按上面規則重新開始下一輪,直到剩下最後乙隻老鼠為止,貓咪為了保持生態平衡就放了這只老鼠 有只老鼠很聰明,他能很準確的計算出最後放生的位置,請用程式寫出來...

貓捉老鼠問題系列(一)

形象化的數學問題,總是引人入勝,這個世界創意還是很重要的。從網上收集了一些貓和老鼠的數學話題,僅供欣賞之。在數軸上,0的位置停著乙個不動的老鼠,1的位置在初始時刻有乙隻貓。貓是可以走動的,每一步在數軸上分別以二分之一的概率或朝著正方向或朝著負方向走1的距離。當貓到達0的位置時,貓就抓到老鼠了,遊戲結...

貓捉老鼠問題系列(四)

從有限到無限,似乎是乙個無法逾越的鴻溝,需要思維的跨越。數學中引入極限概念,實現有限和無限的連線,而極限概念更聯絡著許多知名的悖論,如芝諾悖論,旅館悖論等等。可以說有限和無限的秘密,將是乙個永恆的話題。本章與極限雖無直接關係,但仍可據此浮想聯翩。乙隻貓發現離它10步遠的前方有乙隻老鼠在奔跑,便哈腰緊...