求乙個整數的和子式

2021-06-19 13:10:43 字數 1002 閱讀 4877

這是一道在qq群裡調侃時所見到的題

題目的內容大概是這個樣子

將乙個整數分解成其他整數加和的形式,比如輸入4,產生如下輸出

1+1+1+1

2+1+1

1+2+1

3+11+1+2

2+21+3

4

這個解法是乙個遞迴的方法,思路就是將輸入的數n拆分成a+b的形式然後求所有的b的可能的解,然後再與a相加

**如下:

#include #include using namespace std;

vector> find_add(int n)

}vectorinside;

inside.push_back(n);

outside.push_back(inside);

return outside;

}int main()

cout << *(iter2++) << endl;

}hello.clear();

}return 0;

}

遞迴的方法雖然簡單,但是因為重複運算了很多遍子結果,所以效率很低

為了不重複計算子結果,將其儲存下來,以供後面計算使用。這樣,比解法一多消耗一倍的空間,但是能夠節省大量的時間

vector> find_add(int n)

; vector> temp_mid;

temp_mid.reserve(pow(2,i));

table.push_back(temp_mid);

}for(int i = 0; i != n; i++)}}

return table.at(n - 1);

}

在我電腦上的執行時間如下,單位是秒:n15

20解法一

0.95

3.868

解法二0.2

0.65

求乙個正整數的因子個數

如 整數 15,有1,15,3,5 共4個因子。要求演算法的複雜度為o sqrt n 首先想到的方法是 逐個列舉,從 1 到 n 2 1 當然也可以是 從 1 到 n 這樣演算法的複雜到至少是o n 的,而且,其中還要去重,比如 24 4 6 6 4,這樣還要分配空間來存放找到的因子,並且每次新增的...

關於求乙個正整數階乘的實現

第一種實現小數字階乘 class calculate public long calculatefactorial long n else if n 0 else 第二種實現方法 class calculate public string calculate long n else if n 0 n...

求乙個數的整數次方

題目 求乙個數的整數次方。題目是如此的簡單,但是需要考慮的還是比較多 1.指數為負,底數是零 2.指數底數都是零 3.返回正常零和返回錯誤零的區別 4.底數為正,指數為負如何處理 5.考慮底數次方大的話,想效率問題 6.處理double數值相等問題 以下直接是 詳細考慮除底數指數全零的以上所有情況!...