C 編寫特定條件的約瑟夫環!(原始碼)

2021-08-29 16:55:16 字數 1581 閱讀 8755

這是我們資料結構課的乙個上機作業。

這些原始碼絕對準確,用的c++標準寫法。雖然沒有用stl給出的標準函式庫,而是使用的鍊錶來實現的,其實指標的使用是資料結構中重要的一環。

這個特定條件的約瑟夫環,是這樣描述的:

一.問題描述

設編號為1、2、……n的n個人按順時針方向圍坐一圈,約定編號為k(1<=k<=n)的人按順時針方向從1開始報數,數到m的那個人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的序列。試設計演算法求出n個人的出列順序。

二.基本要求

程式執行時,首先要求使用者指定人數n、第乙個開始報數的人的編號k及報數上限值m。然後,按照出列的順序列印出相應的編號序列。

這個問題和一般的約瑟夫有所不同,不過其實本質都差不多。

這不過是加了一步操作。

下面是c++原始碼:

#include

<

iostream

>

using

namespace

std; 

//鍊錶結點類number為這個人的編號

struct

person ;//

約瑟夫環類,此類包含多個person類,並控制輸入輸出. 

class

joseph_ring 

//建構函式,把成員變數賦初值 

void

create();

//建立環的成員函式 

void

show();

//運算並輸出的成員函式 

};void

joseph_ring::create() //

否則,p2永遠指向尾結點,新建的結點都接到p2之後 

else } 

p2->

next

=head;

//把鍊錶連成乙個迴圈鍊錶(就是乙個環) 

} void

joseph_ring::show() p1=

head;

//有n個人,所以執行n次迴圈

for(

inti=1

;i<=

n;i++) 

cout

<<

p1->

number

<

";//輸出當前人的編號 p=

p1;//

p指向當前這個人 

p2->

next=p1

->

next;

//把當前的人前的人和當前的人後的人連上. p1=

p1->

next;

//下次從當前的人的下乙個人開始數 

delete p;

//把這個人刪除(就是釋放這塊記憶體) 

} //

cout<

//cin>>m;

//這行是為了避免程式迅速關閉,看不到結果. 

} int

main() 

這個程式可以順利的編譯執行,如果用vc不能編譯可能是版本問題。

施楊出品

用c 編寫的檔案分割器原始碼!

只適用於txt,vbe,c,cpp等檔案 include include include include using namespace std void fengeming void void wenjiangeshu void void fengewenjian void char srwenj...

原始碼和文件分享 基於C 的約瑟夫生者死者遊戲

一 使用說明 1.1 專案簡介 約瑟夫生者死者遊戲的大意是 30個旅客同乘一條船,因為嚴重超載,加上風高浪大危險萬分 因此船長告訴乘客,只有將全船一半的旅客投入海中,其餘人才能倖免於難。無奈,大家只得同意這種方法,並議定30個人圍成一圈,由第乙個人開始,依次報數,數到第9人,便將他投入大海中,然後從...

原始碼和文件分享 基於C 的約瑟夫生者死者遊戲

一 使用說明 1.1 專案簡介 約瑟夫生者死者遊戲的大意是 30個旅客同乘一條船,因為嚴重超載,加上風高浪大危險萬分 因此船長告訴乘客,只有將全船一半的旅客投入海中,其餘人才能倖免於難。無奈,大家只得同意這種方法,並議定30個人圍成一圈,由第乙個人開始,依次報數,數到第9人,便將他投入大海中,然後從...