編寫乙個程式,輸出2~10000之間的所有完全數。所謂完全數,是指這樣的數,該數的各因子(除該數本身外)之和正好等於該數本身,例如:
6=1+2+3
28=1+2+4+7+14
#include
using
namespace std;
intmain()
if(m == s)
cout << s <<
" ";}
}
問題描述:對於給定的正整數n(n≥1),求1~n構成的集合的所有子集(冪集)。
冪集(power set):原集合中所有的子集(包括全集和空集)構成的集族
例如:n為3時,集合為:
所有的子集為:{}, , , , , , ,
1、兩個陣列,乙個資料初始化為1到n,另乙個陣列初始化為1到n
2、set方法,輸出2n個子集,也就是說共進行2n次迴圈,每次迴圈裡再遍歷陣列,如果b[i]等於1,則a[i]輸出(存在於要輸出的子集),
3、2n次迴圈中最後要讓b陣列進行一次改變,相當於2進製數+1
#include
using
namespace std;
int num =0;
void
inc(
int b,
int n)
else}}
void
set(
int a,
int b,
int n)
} cout <<
"}";
inc(b, n)
;//二進位制+1}}
void
main()
b[i]=0
;//b的初始化為
}set
(a, b, n)
;}
有n個重量分別為的物品,它們的價值分別為,給定乙個容量為w的揹包。
設計從這些物品中選取一部分物品放入該揹包的方案,每個物品要麼選中要麼不選中,要求選中的物品不僅能夠放到揹包中,使得裝入揹包中物品的總價值最大。
#include
using
namespace std;
void
inc(
int b,
int n)
else}}
void
set(
int a,
int b,
int n,
int w,
int v,
int w)
} cout <<
"}\t\t"
<< sumw <<
"\t"
<< sumv <<
"\t";if
(sumw <= w)
}else
inc(b, n);}
cout <<
"最佳方案為:序號"
<< maxi <<
",總重量:"
<< maxsumw <<
",總價值:"
<< maxsumv;
}void
main()
, v=
;int a[
100]
, b[
100]
;for
(int i =
0; i < n; i++
) b[i]=0
;//初始化b
}set
(a, b, n, w, v, w)
;}
演算法設計與分析 蠻力法求解0 1揹包問題
由於最近在複習演算法設計與分析,所以就想試著完成一下書上的 描述 揹包問題 給定重量分別為,價值分別為的n件物品,和乙個承重為w的揹包。求這些物品中乙個最有價值的子集,並能裝到揹包中。揹包問題的蠻力解法是窮舉這些物品的所有子集,找出能夠裝到揹包中的所有子集,並在這些子集中找出價值最大的子集 實驗資料...
演算法分析與設計 蠻力法0 1揹包
蠻力法是一種簡單直接解決問題的方法,常常直接基於問題的描述,所以蠻力法也是最容易應用的方法。蠻力法所依賴 的基本技術是遍歷,即採用一定的策略依次處理待求解問題的所有元素,從而找出問題的解。由於其需要依次窮舉待處理的元素,因此蠻力法是一種典型的指數級時間演算法。給定n個重量為 價值為的物品和乙個容量為...
演算法設計與分析學習 蠻力法
參考 演算法設計與分析 第三章 蠻力法 接下來的每章中,我們專注於一種特定的演算法設計策略。蠻力法是一種最簡單和直接的解決問題的辦法,往往是低效的,但我們不應該忽略它的地位,1 它可以解決廣闊領域的各種問題 2 在規模允許時,多少可以產生一些實用的演算法 3 往往可以以蠻力法為準繩,來衡量高效的演算...