求冪,全排列基本演算法

2021-06-22 18:15:17 字數 1184 閱讀 4673

看這些演算法很費,用了兩個多小時

1 全排列:迭代思想,未考慮重複元素

#include using namespace std;

void swap(char* a,char* b)

/*全排列思想:1)2個數全排列 ab ba,即第乙個數與後面的數交換。 視a不動,則bc排列 abc acb

2)迭代:把最後兩個數交換,前面其他的數看成乙個數。 a 與b交換後,視b不動 bac bca ;a與c交換後視c不動, cba cab

*/// 第m個數,共有len個數

void allrange(char* pstr,int m, int len)

else

return result;

}/*--------------------- 遞迴二分法實現階乘------------------------*/

int power2(int x,int n)

else if(1 == n)

else

else

}}/*-------------------------非遞迴的二分法-----------------------------*/

/*x^23寫成x^16 * x^4* x^2 * x,即23=16+4+2+1,而23 = 10111(二進位制),

所以只要將n化為二進位制並由低位到高位依次判斷如果第i位為1,則result *=x^(2^i)

*/int power3(int x, unsigned int n)

return result;

}/*---------------------------------改進非遞迴二分法------------------

如像48=110000(二進位制)這種低位有很多0的數,可以先過濾掉低位的0再進行計算,這樣也會提高一些效率*/

//計算x^n by morewindows( )

int power4(int x, unsigned int n)

else }

int result = x;

n >>= 1;

while (n != 0)

return result;

}int main()

{ int x=10,n=4,result=0;

result = power4(x,n);

cout<3參考 

蠻力法的基礎工具 求冪集 全排列演算法

冪集物件 vectorint pwset 全排列物件 vectorint arrage 採用增量窮舉思想構造冪集 void getset int n void print pwset endl void print arrage endl void insert vector int vec,int...

基本演算法 List全排列演算法

現在有乙個列表,需要將列表第k個到第m個元素進行全排列,並且輸出。基本思想 一 當k m時,即待排序列不存在時,直接輸出0到m項的值。二 當k m時,依次將序列中每乙個元素排到第k位,然後再全排k 1到m項。演算法如下 protected void button1 click object send...

求序列的全排列演算法

所謂全排列,就是將集合中元素的所有排列情況依次輸出。比如的全排列為 123 132 213 231 312 321,共6種,滿足計算公式n n為集合中元素個數,不重複 當元素不重複時,全排列採用遞迴思想較容易實現,它的遞迴公式推導步驟類似 1 要求得123的全排列,只需求得 1並上23的全排列 1 ...