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 位置 和 第乙個元素的位置 互換,此時第乙個元...