1197約瑟夫問題

2021-08-21 15:35:17 字數 1087 閱讀 1252

約瑟夫問題

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和...