約瑟夫問題
time limit: 1000 ms memory limit: 65536 kib
problem description
n個人想玩殘酷的死亡遊戲,遊戲規則如下:
n個人進行編號,分別從1到n,排成乙個圈,順時針從1開始數到m,數到m的人被殺,剩下的人繼續遊戲,活到最後的乙個人是勝利者。
請輸出最後乙個人的編號。
input
輸入n和m值。
output
輸出勝利者的編號。
sample input
5 3
sample output
4 hint
第一輪:3被殺第二輪:1被殺第三輪:5被殺第四輪:2被殺
source
think:
首先建立乙個迴圈鍊錶,迴圈鍊錶就是最後把tail連在head上,連成乙個圈;
然後就是殺人的過程,最後要留1個人,所以要殺n-1個,也就是外迴圈要跑n-1次,每次都有乙個計數器,每殺完乙個人就要清零,第二層迴圈何時停止,就是當計數器計數到m時停止,然後裡面執行鍊錶的刪除過程:兩個指標,打頭跑的那個指標q的data如果是目標,就要執行p->next=q->next,q=q->next;否則就要執行p=q.q=q->next;在這裡多了一步
if
(q==head)
因為數數的時候頭結點是不算的,所以到頭結點的時候要注意,直接跳過,不能計數
#include
#include
struct node
;struct node*create(int n)
tail->next=head;//構建乙個迴圈鍊錶
return head;
}void circle(struct node*head,int n,int
m)//迴圈煉表裡不能有頭結點,跳過
else
else p=q;
}q=q->next;}}
printf("%d\n",p->data);
}int main()
1197約瑟夫問題
time limit 1000ms memory limit 65536k 有疑問?點這裡 n個人想玩殘酷的死亡遊戲,遊戲規則如下 n個人進行編號,分別從1到n,排成乙個圈,順時針從1開始數到m,數到m的人被殺,剩下的人繼續遊戲,活到最後的乙個人是勝利者。請輸出最後乙個人的編號。輸入n和m值。輸出勝...
約瑟夫問題 1197
submit statistic discuss problem description n個人想玩殘酷的死亡遊戲,遊戲規則如下 n個人進行編號,分別從1到n,排成乙個圈,順時針從1開始數到m,數到m的人被殺,剩下的人繼續遊戲,活到最後的乙個人是勝利者。請輸出最後乙個人的編號。input 輸入n和m...
約瑟夫問題 sdut 1197
約瑟夫問題 time limit 1000ms memory limit 65536k 題目描述 n個人想玩殘酷的死亡遊戲,遊戲規則如下 n個人進行編號,分別從1到n,排成乙個圈,順時針從1開始數到m,數到m的人被殺,剩下的人繼續遊戲,活到最後的乙個人是勝利者。請輸出最後乙個人的編號。輸入 輸入n和...