約瑟夫環
約瑟夫環(
約瑟夫問題
)是乙個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下乙個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。它也是演算法設計中乙個老生常談的問題,有迴圈鍊錶法、陣列法、數學分析法等。
鍊錶法:充分利用迴圈鍊錶的迴圈特性,也是最容易想到、最容易實現的一種,前提是對鍊錶要有充分的了解,對指標操作不感冒;
數學分析法:不考慮演算法問題,將約瑟夫環抽象為乙個單純的數學問題,通過數學推理,可得到乙個簡單的數學公式,x'=(x+k)%n,這種方法演算法設計極簡單,但對數學推導功底要求較高;
陣列法:為常規一般的程式設計方法,通過陣列元素的增減處理,借助合理的邏輯設計達到的設計演算法。符合常規演算法設計思維,但對邏輯思維要求較高。
考慮到網上、書籍中多以鍊錶法居多,我們就用陣列法實現:
演算法:
step1、一群人圍在一起坐成環狀(如:n)
step2、從某個編號開始報數(如:k)
step3、數到某個數(如:m)的時候,此人出列,下乙個人重新報數
step4、一直迴圈,直到所有人出列,約瑟夫環結束,輸出最後剩下的人的編號
程式設計如下:
#include
int main()
aimindex=startindex-2;
while(total-1)
else
} for(i=aimindex;i
for(i=0;i
printf("###\n");
aimindex-=1;
total--; }
printf("the last number is
:%d\n",a[0]);
printf("-------------------------\n");
return 0; }
一般線性鍊錶類的C 實現
以下的c 類linklist實現了線性鍊錶的一般操作。可以直接在其他的程式中直接建立它的物件,其中線性表中的資料在此為整型,具體應用的時候可以適當的修改,並可以在此基礎上繼續封裝特定的功能。標頭檔案 linklist.h typedef struct lnode lnode,plinklist cl...
一般線性鍊錶類的C 實現
以下的c 類linklist實現了線性鍊錶的一般操作。可以直接在其他的程式中直接建立它的物件,其中線性表中的資料在此為整型,具體應用的時候可以適當的修改,並可以在此基礎上繼續封裝特定的功能。標頭檔案 linklist.h typedef struct lnode lnode,plinklist cl...
C 一般處理程式
string username context.request.querystring txtname 接收的是表單元素name屬性的值 string userpwd context.request.querystring txtpwd string username context.request...