貓吃老鼠問題

今天在看雪看到這個“貓吃老鼠問題”的帖子,和當初學編程時的一個叫做“約瑟夫環問題”類似。

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

 

問題描述:

      現有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);



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

 

 

分析圖示:

   1
1:01 1
2:02 1 2
2
3:02 1 2 3
2
4:04 1 2 3 4
2 4
4
5:02 1 2 3 4 5
2 4
2
6:04 1 2 3 4 5 6
2 4 6
4
7:06 1 2 3 4 5 6 7
2 4 6
2 6
6
8:08 1 2 3 4 5 6 7 8
2 4 6 8
4 8
8
9:02 1 2 3 4 5 6 7 8 9
2 4 6 8
2 6
2
10:04 1 2 3 4 5 6 7 8 9 10
2 4 6 8 10
4 8
4
11:06 1 2 3 4 5 6 7 8 9 10 11
2 4 6 8 10
2 6 10
6
12:08 1 2 3 4 5 6 7 8 9 10 11 12
2 4 6 8 10 12
4 8 12
8
13:10 1 2 3 4 5 6 7 8 9 10 11 12 13
2 4 6 8 10 12
2 6 10
2 10
10
14:12 1 2 3 4 5 6 7 8 9 10 11 12 13 14
2 4 6 8 10 12 14
4 8 12
4 12
12
15:14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 4 6 8 10 12 14
2 6 10 14
6 14
14
16:16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
2 4 6 8 10 12 14 16
4 8 12 16
8 16
16
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章