約瑟夫問題(指標變數及線性鍊錶)

2021-07-11 01:57:59 字數 1519 閱讀 7292

description

設有n個人依次圍成一圈,從第1個人開始報數,數到第m個人出列,然後從出列的下乙個人開始報數,數到第m個人又出列,…,如此反覆到所有的人全部出列為止。設n個人的編號分別為1,2,…,n,輸出最後乙個的編號。

input

n,m (1<=n,m<=100000)

output

最後乙個的編號

sample input

13 5

sample output

6

解題思路:在讀入後,先建立乙個1..n的迴圈鍊錶,然後由一開始掃瞄,當i累計到mod m=0的時候就將last的指標指向next的下乙個元素,並將next所指的位址刪除,當next的下乙個元素是next本社結束迴圈,最後輸出即可。

程式:
type
point=^node;
node=record

data:longint;

link:point;

end;

var
m,n,i1:longint;
i:int64;
head,next,last:point;

begin
readln(n,m);
new(head);
head^.data:=1;
last:=head;
for i1:=2 to n do

begin

new(next);

next^.data:=i1;

last^.link:=next;

last:=next;

end;
last^.link:=head;
i:=1;
next:=head;
repeat

if i mod m=0 then

begin

last^.link:=next^.link;

dispose(next);

next:=last;

end else last:=next;

next:=next^.link;

inc(i);

until next^.link=next;
writeln(next^.data);
end.

刪數問題(指標變數與線性鍊錶)

題目 建乙個鍊錶 棧鍊錶 節點的值依次由鍵盤輸入。要求任意輸入乙個數,把它從鍊錶中刪除,輸出刪除後的鍊錶。樣例輸入 1 2 3 4 5 6 1 3 樣例輸出 1 2 4 5 6 解題思路 先把讀入的資料變為乙個線性鍊錶,然後在這裡面尋找要刪除的數,進行刪除,最後輸出刪除後的線性鍊錶即可。程式 typ...

迴圈鍊錶 約瑟夫問題

設編號分別為 1,2,n的n個人圍坐一圈。約定序號為k 1 k n 的人從1開始計數,數到m的那個人出列,他的下一位又從1開始計數,數到m的那個人又出列,依次類推,直到所有人出列為止。演算法思路 1 先建立乙個有n個結點的單迴圈鍊錶,編號從1到n,代表n個人。2 找到第k個結點,即第乙個開始報數的人...

(迴圈鍊錶)約瑟夫問題

time limit 1000 ms memory limit 65536 kib submit statistic n個人想玩殘酷的死亡遊戲,遊戲規則如下 n個人進行編號,分別從1到n,排成乙個圈,順時針從1開始數到m,數到m的人被殺,剩下的人繼續遊戲,活到最後的乙個人是勝利者。請輸出最後乙個人的...