每天一演算法 約瑟夫問題

2021-07-12 02:21:58 字數 414 閱讀 5144

1.約瑟夫問題

問題描述:n個人(編號1~n),從1開始報數,報到m的退出,剩下的人繼續從1開始報數。按順序輸出列者編號。數學解法複雜度:o(n)。

演算法一(數學解法):

int main( void )

return 0;

}演算法二:

i=-1;

while(ncounti=(i+1)%nallcount;//迴圈報數

while(nindexif(npindex[i]==0)//如果當前序號已出列,則下一位報數

nindex++;//報數一次

}//列印當前出列的編號

printf("第%d個出列的為:%d\n",ncount+1,npindex[i]);

npindex[i]=0;

ncount++;

}

每天一演算法(生命遊戲)

說明 生命遊戲 game of life 為1970年由英國數學家j.h.conway所提出,某一細胞的鄰居包括上 下 左 右 左上 左下 右上與右下相鄰之細胞,遊戲規則如下 復活 如果某位置原無細胞存活,而該位置的鄰居為三個,則該位置將復活一細胞。解法 生命遊戲的規則可簡化為以下,並使用case比...

每天一演算法 (氣泡排序)

一 原理 比較兩個相鄰的元素,將值大的元素交換至右端。二 思路 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟 首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。重複第一趟步驟,直至全...

每天一演算法 (選擇排序)

一 原理 在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換 然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止 二 思路 1.假設有乙個陣列為 n個數 第一趟先選出 最小的元素 min k 將min k 位置 和 第乙個元素的位置 互換,此時第乙個元...