7 34 猴子選大王 20分

2022-08-18 16:18:11 字數 1045 閱讀 9878

7-34 猴子選大王 (20分)

一群猴子要選新猴王。新猴王的選擇方法是:讓n只候選猴子圍成一圈,從某位置起順序編號為1~n號。從第1號開始報數,每輪從1報到3,凡報到3的猴子即退出圈子,接著又從緊鄰的下乙隻猴子開始同樣的報數。如此不斷迴圈,最後剩下的乙隻猴子就選為猴王。請問是原來第幾號猴子當選猴王?

輸入在一行中給乙個正整數n(≤1000)。

在一行中輸出當選猴王的編號。

11

7

此題我用了三種方法,當然第三種最好,第一種就是利用陣列來標記在內還是不在內的,好處是一眼就能看懂,壞處是跟這個n有關,如果n太大就。。。

第二種是利用鍊錶 其實和陣列大致相同只不過要找到被刪除的前乙個,這樣方便刪除,直到最後乙個為止。

第三種辦法是最優解,只不過這題的n最大的時候也太小,顯現不出來。他實質上是將每次編號重拍  然後最後剩下的編號一定為0  反推回來   最好不要用遞迴

因為如果遞迴深度過大,會系統棧益出。

#include

#include

#include

typedef struct lnode

lnode ;

//約瑟夫環經典問題

//陣列標記法  

int arr(int n,int m) }

}printf("%d\n",(i-1+n)%n+1);

} //鍊錶

int clnode(int n,int m)

p->next=l->next;

free(l);

while(p!=p->next)

s=p->next;

p->next=s->next;

free(s);

}printf("%d\n",p->data);

return 1;

}int ysf(int n,int m)    //最有解  將每次編號重拍  然後最後剩下的編號一定為0  反推回來   最好不要用遞迴

int main()

7 34 猴子選大王 20分

一群猴子要選新猴王。新猴王的選擇方法是 讓n只候選猴子圍成一圈,從某位置起順序編號為1 n號。從第1號開始報數,每輪從1報到3,凡報到3的猴子即退出圈子,接著又從緊鄰的下乙隻猴子開始同樣的報數。如此不斷迴圈,最後剩下的乙隻猴子就選為猴王。請問是原來第幾號猴子當選猴王?輸入在一行中給乙個正整數n 10...

5 28 猴子選大王 20分

5 28 猴子選大王 20分 一群猴子要選新猴王。新猴王的選擇方法是 讓n只候選猴子圍成一圈,從某位置起順序編號為1 n號。從第1號開始報數,每輪從1報到3,凡報到3的猴子即退出圈子,接著又從緊鄰的下乙隻猴子開始同樣的報數。如此不斷迴圈,最後剩下的乙隻猴子就選為猴王。請問是原來第幾號猴子當選猴王?輸...

7 28 猴子選大王(20 分)

7 28 猴子選大王 20 分 一群猴子要選新猴王。新猴王的選擇方法是 讓n只候選猴子圍成一圈,從某位置起順序編號為1 n號。從第1號開始報數,每輪從1報到3,凡報到3的猴子即退出圈子,接著又從緊鄰的下乙隻猴子開始同樣的報數。如此不斷迴圈,最後剩下的乙隻猴子就選為猴王。請問是原來第幾號猴子當選猴王?...