約瑟夫問題兩種實現方式

2021-10-02 13:03:46 字數 1661 閱讀 3738

陣列版本

#include#include main()

int *p=(int*)malloc(len*sizeof(int));

printf("請輸入步長:\n");

scanf("%d",&pace);

if(pace==0)

//if(pace==0)

printf("請輸入進行輪數:\n");

scanf("%d",&time);

printf("請輸入您想從那個元素開始:\n");

scanf("%d",&start);

if(start==0)

for(int i=0;i(len-time))//從規定元素起點開始

}index++;

if(index == len) // 當到陣列尾,陣列下標index置零,重新開始

}for(int j=0;j單向迴圈鍊錶版本

# include # include typedef struct circle_listnode,*pnode;//定義節點

pnode creat_list(int len);//建立迴圈鍊錶

void visit_list(pnode mark,int len,int time);//遍歷尋歡鍊錶

pnode kill_list(pnode head,int pace,int time,int len,int mark);//刪除迴圈鍊錶的乙個給定下表的元素

main()

head=creat_list(len);//建立鍊錶

printf("請輸入您想從第幾個人開始:\n");

scanf("%d",&index);

printf("請輸入步長(每經過幾個人殺乙個人:)\n");

scanf("%d",&pace);

printf("請輸入進行的第幾輪:\n");

scanf("%d",&time);

mark=kill_list(head,pace,time,len,index);//殺人並提供訪問遍歷鍊錶的下標

visit_list(mark, len,time);//遍歷鍊錶

}pnode creat_list(int len)

head=p;

p->data=1;//建立頭結點 並且將它的資料域置為1

for(i=2;i<=len;i++)//建立其他節點並依次將這些節點掛在尾部

q->data=i;//依次給節點資料域賦值,作為「人」的序號

p->next=q;

p=q;//讓p永遠指向鍊錶的尾部

}p->next=head;//首尾相連

return head;//返回頭結點位址以便訪問

}void visit_list(pnode mark,int len,int time)//遍歷迴圈鍊錶

while(p!=mark);//當沒有迴圈夠一圈

printf("\n"); }

pnode kill_list(pnode head,int pace,int time,int len,int index)

} p=p->next;//遍歷條件

} return mark;

}

約瑟夫問題兩種實現方式

陣列版本 include include main int p int malloc len sizeof int printf 請輸入步長 n scanf d pace if pace 0 if pace 0 printf 請輸入進行輪數 n scanf d time printf 請輸入您想從那...

約瑟夫環的兩種實現

方法一 用乙個陣列存放每個元素,再用乙個bool陣列存放每個元素是否還在那個佇列中。每次出列乙個元素,將其對應的那個bool值置為false。迴圈輸出第m個元素直到只剩下乙個元素在佇列中。不過這個時間複雜度比較高。includeusing namespace std 時間複雜度高的方法 define...

兩種方式實現checkBox readonly功能

今天在做開發的時候遇到了這樣乙個問題 有乙個checkbox選項是不能被改變的。但是checkbox又是沒有readonly屬性的,這個時候我就想到了另外乙個屬性disabled,但是disabled的物件是不能提交到後台的,所以這個又被排除掉了。想了想,只能新增事件來搞定了。於是在checkbox...