SDUT 鍊錶之不敢死隊問題

2021-10-04 00:15:41 字數 1557 閱讀 7441

不敢死隊問題

oblem description

到「敢死隊」,大家不要以為我來介紹電影了,因為資料結構裡真有這麼道程式設計題目,原題如下:

有m個敢死隊員要炸掉敵人的乙個碉堡,誰都不想去,排長決定用輪迴數數的辦法來決定哪個戰士去執行任務。如果前乙個戰士沒完成任務,則要再派乙個戰士上去。現給每個戰士編乙個號,大家圍坐成一圈,隨便從某乙個戰士開始計數,當數到5時,對應的戰士就去執行任務,且此戰士不再參加下一輪計數。如果此戰士沒完成任務,再從下乙個戰士開始數數,被數到第5時,此戰士接著去執行任務。以此類推,直到任務完成為止。

這題本來就叫「敢死隊」。「誰都不想去」,就這一句我覺得這個問題也只能叫「不敢死隊問題」。今天大家就要完成這道不敢死隊問題。我們假設排長是1號,按照上面介紹,從1號開始數,數到5的那名戰士去執行任務,那麼排長是第幾個去執行任務的?

input

輸入包括多組資料,每組一行,包含乙個整數m(0<=m<=10000)(敢死隊人數),若m==0,輸入結束,不做處理。

output

輸出乙個整數n,代表排長是第n個去執行任務。

sample input96

2230

sample output26

132解題的主要思路是構建鏈環,其實也可以用

int f(int n,int m)

return n==1?n:(f(n-1,m)+m-1)%n+1;

在本題中m 的值為5;

不好意思,我好像寫錯了,這個是返回最後所存值的編號,那就在這裡記錄一下吧!!

#include

using

namespace std;

struct node

;int

main()

tail-

>next=head-

>next;

num=0;

m=0;

tail=head;

p=tail-

>next;

while

(numelse

}printf

("%d\n"

,num);}

return0;

}

下面再說一下雙向鍊錶的做法

#include

#include

struct node

;int

main()

tail->next=head->next;

head->next->up=tail;

int d=

0,c=0;

q=head->next;

free

(head)

;while(1

)else

q=q->next;

}printf

("%d\n"

,c);

}return0;

}

sdut 不敢死隊問題

有m個敢死隊員要炸掉敵人的乙個碉堡,誰都不想去,排長決定用輪迴數數的辦法來決定哪個戰士去執行任務。如果前乙個戰士沒完成任務,則要再派乙個戰士上去。現給每個戰士編乙個號,大家圍坐成一圈,隨便從某乙個戰士開始計數,當數到5時,對應的戰士就去執行任務,且此戰士不再參加下一輪計數。如果此戰士沒完成任務,再從...

鍊錶 不敢死隊

description 有m個敢死隊員要炸掉敵人的乙個碉堡,誰都不想去,排長決定用輪迴數數的辦法來決定哪個戰士去執行任務。如果前乙個戰士沒完成任務,則要再派乙個戰士上去。現給每個戰士編乙個號,大家圍坐成一圈,隨便從某乙個戰士開始計數,當數到5時,對應的戰士就去執行任務,且此戰士不再參加下一輪計數。如...

SDUT OJ 不敢死隊問題 鍊錶

time limit 1000ms memory limit 65536k 有m個敢死隊員要炸掉敵人的乙個碉堡,誰都不想去,排長決定用輪迴數數的辦法來決定哪個戰士去執行任務。如果前乙個戰士沒完成任務,則要再派乙個戰士上去。現給每個戰士編乙個號,大家圍坐成一圈,隨便從某乙個戰士開始計數,當數到5時,對...