C語言約瑟夫環問題,約瑟夫環問題,用C語言編寫

時間 2021-09-06 10:36:09

1樓:匿名使用者

/*josephus_clist.c*/

/*josephus問題:迴圈連結表實現*/

#include

#include

#define false 0

#define true 1

typedef int datatype; /* 定義元素型別為整型,也可定義為其他型別 */

struct node; /* 單連結串列結點型別 */

typedef struct node *pnode; /* 結點指標型別 */

struct node /* 單連結串列結點結構 */

;typedef struct node *linklist;

typedef linklist *plinklist;

int init_clist( plinklist pclist, int n )

/* 用1,2,……,n為*pclist所示的迴圈表初始化 */

return (true);

}void josephus_clist( plinklist pclist, int s,int m )

}else for(i=1;ilink;

}while (p!=p->link) /* 當連結串列中結點個數大於1時 */

printf(「 out element: %d \n」,p->info); /* 輸出該結點 */

if (*pclist ==p) /* 該結點是第一個結點時,刪除時需特殊處理一下 */

*pclist =p->link;

pre->link = p->link; /* 刪除該結點 */

free(p);

p = pre->link;

}printf(「 out element: %d \n」,p->info); /* 輸出最後一個結點 */

*pclist=null;

free(p);

}main( )

while (n<1);

dowhile (s<1);

dowhile (m<1);

if (init_clist(&jos_clist,n))

else

printf(「out of space!\n」);}

2樓:移動班班長

樓主太不小心了,主函式裡你定義的lb指標沒用到啊,你建立的連結串列是由la指向的,怎麼能將lb傳址呢??可以得出答案哦。。

約瑟夫環問題,用c語言編寫

3樓:匿名使用者

數學原理

有遞迴和迭代兩個程式,選一個即可。

#include

int josephus2(int n, int k)int josephus(int n, int m)return x;

}int main()

c語言約瑟夫環問題

4樓:風若遠去何人留

#include

#define n 17              //人數#define m 11              //出局人號碼void  main()

}i++;   i %= n;      //迴圈轉向下一人}printf("\n最後剩餘者的編號是:%d\n", i + 1);}

c語言連結串列寫約瑟夫環問題 5

5樓:匿名使用者

#include

#include

typedef struct node//節點存放一個資料和指向下一個節點的指標

node;

node *link_create(int n)//建立n個節點的迴圈連結串列

p->pnext = head;//最後一個節點指向頭部,形成迴圈連結串列

return head;

}void link_process(node *head,int k,int m)//從編號為k(1<=k<=n)的人開始報數,數到m的那個人出列;

printf("%d ",p->data);

tmp1->pnext= p->pnext;

free(p);

p = tmp1->pnext;

}printf("%d ",p->data);

free(p);

}int main()

有點長,但是應該看得懂,

迴圈連結串列的。

6樓:匿名使用者

c語言的約瑟夫環問題,利用單迴圈連結串列,**如下:

#include//利用單迴圈連結串列!!!!!

#include

#include

typedef int elemtype;

typedef struct singlenode

sll,*linklist;

int main()

use->next = head;//末首相連,形成環

printf("人員序號為:");  //輸出人員的序號

temp=head;

for(i=0;idata);

temp=temp->next;

}printf("\n");

for(i=0;inext;

}printf("人員出列順序為:");

while (n)

printf("\n");

return 0;

}單連結串列實現**如下:

#include//這是使用單連結串列做的約瑟夫環

#include

#include

typedef int elemtype;

typedef struct singlenode

sll,*linklist;

void listinitialize(sll **head)   //初始化

int listinsert(sll *head,int i,elemtype x)  //插入

if(j!=i-1)

if((q=(sll *)malloc(sizeof(sll)))==null)

exit(1);

q->data=x;

q->next=p->next;

p->next=q;

return 1;

}int listget(sll *head,int i,elemtype *x)   //取

if(j!=i)

*x=p->data;

return 1;

}void yuesefu(sll *head, elemtype n,elemtype m,elemtype k)  //約瑟夫刪除操作

while(p->next!=null)

if(p->next==null)  p->next=head->next;   //控制迴圈

s=p->next;  //刪除第k個元素

x=s->data;

if(s->next==null)  s->next=head->next;  //控制迴圈

p->next=s->next;

printf("%d ",x);  //輸出第k個元素

j=j+1;   //用以統計總共輸出了多少個元素

free(s);

if(j==n) break;

i=0;   //i清零}}

void main()

{sll *head;

int x,i,n,m,k,a=0;

listinitialize(&head); //呼叫初始化函式

printf("請輸入總人數n:");

scanf("%d",&n);

printf("從第m個人開始數起,請輸入m:");

scanf("%d",&m);

printf("數到第k個人,該人出列,請輸入k:");

scanf("%d",&k);

for(i=0;i

急求c語言關於約瑟夫環問題,關於指標

7樓:匿名使用者

以前做過一個,函式結合指標的,還有用單連結串列處理的,給你貼一個,僅供參考 #include

#include

//應用函式呼叫來實現

void fun_kill(int *pa,int n,int m)i=0;

int mcount=0;

int icount=0;

while(icount

if(mcount==m)

i++;//報數的同時指標也開始走動

if(i==n)

}for(i=0;i

}}int main()

8樓:匿名使用者

#include

#include

#include

#define elemtype int

typedef int status;// 連結串列型別

typedef struct node

node, *linklist;// 判斷儲存分配是否成功

status mallocok(linklist p)

// 建立一個帶頭結點的、能夠產生n個資料元素的線性連結串列l

p->next=l;

}// 輸出線性連結串列l中的所有資料元素

void printjosephus(linklist l)

printf(")\n");

}// 銷燬線性連結串列l

// 根據計數情況依次彈出線性連結串列l中的n個資料元素

printf("\nresult is ( ");

while (jnext;

if (p==l) p=p->next;

}printf("%d ",p->data); //輸出被彈元素

q=p->next;

if (q==l) q=q->next;

p->data=q->data;

p->next=q->next;

free(q); //刪除並釋放結點

++j;

}printf(")\n");

}void main()

createjosephus(l,n0);

printjosephus(l); printf("\nplease input k, m = ");

scanf("%d, %d",&k0,&m0);

if (n0>0 && k0>0 && m0>0) josephus(l,n0,k0,m0); destroyjosephus(l);}

c語言用遞迴解決約瑟夫環問題,求出列順序

9樓:馬小芳

思路:當有n個人的時候,他們的編號依次是0、1、2、3、4、………、n-1。假設最後編號為x(n)的人會留下來。

因為數到m的那個人會出列,那麼此輪中編號為(m-1)%n的人會出列,編號為(m+0)%n的人將做為下一輪編號為0的人,此輪編號為(m+i)%n的人將做為下一輪編號為i的人…

因此當有n-1個人的時候,編號為i的人對應著上一輪編號為(m+i)%n的人。假設此輪編號為x(n-1)的人最終會留下來。因為編號為x(n-1)的人肯定對應著上一輪的x(n),所以有x(n)=(m+x(n-1))%n。

有了這個遞推公式,那我們就可以一直遞推到x(2)=(m+x(1))%2,而x(1)=0。

所以我們可以這麼來寫這個函式:j = 0

for i 從 2 到 n

j = (m+j)%i最終第j個人會留下來(如果從1開始編號就是第j+1個人最終會留下來)

**int fun(int n, int m)

main()

vb約瑟夫問題求解,C語言程式設計問題 約瑟夫問題求解

private sub command1 click clsdim a as integer,b as integer,m as integer,n as integer dim i as integer,k as integer,c as integer,x as integer n val te...

約瑟夫環問題設計帶頭結點的迴圈單連結串列類,實現約瑟夫環問題問題描述 設編號為1,2n n0 個

用指標實現的迴圈單連結串列。include using namespace std struct node node head int m,n void build p next head node move int step,node from void go cout int main incl...

約瑟夫遊戲問題 20,誰知道約瑟夫斯問題怎麼解

1全部題目 聽過這樣一個古老的傳說 有64名戰士被敵人俘虜了。敵人命令他們拍成一圓圈,編上號碼1,2,3 64。敵人把1號殺了,又把3號殺了,他們隔著一個殺一個這樣轉著圈殺。最後只剩下一個人,這個人就是約瑟夫斯。請問約瑟夫斯是多少號?這就是 約瑟夫斯 問題。這個問題解答起來比較簡單 敵人從1號開始,...