這是一道在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數值相等問題 以下直接是 詳細考慮除底數指數全零的以上所有情況!...