####C++の質問です。
入力で整数n、n個の数字が与えられた時、その数字の足し算の組み合わせを算出するプログラムを作りたいです。数字を1つもつかわなくてもよいという条件です。
例えば、 3つの数字{1,3,5}が与えられた時、{0,1,3,4,5,6,8,9]の8通り というのを求めたいです。
c++
1using namespace std; 2int main(void){ 3 4 int n; 5 cin >> n; 6 int i; 7 int a[n+1]; 8 set<int> B; 9 10 a[0] = 0; 11 for(i=1;i<n+1;i++){ 12 cin >> a[i]; 13 } 14 15 for(int S = 0; S < (1<<(n+1)); S++) { 16 int sum = 0; 17 if(__builtin_popcount(S) > 0) { 18 for(int i = 0; i < n+1; i++) { 19 if(S >> i & 1) sum += a[i]; 20 } 21 22 B.insert(sum); 23 } 24 } 25 std::cout <<B.size()<<std::endl; 26 for(auto e: B) std::cout<<e<<std::endl; 27 return 0; 28}
自力で作ったのがこちらになります。(ネットで調べながら)
こちらaの要素数が小さければ正確な値を出力できますが、要素数が大きくなるとタイムアウトエラーが発生してしまいます。
プログラミング初心者ですので、ご丁寧に教えていただけたら幸いです。
回答5件
あなたの回答
tips
プレビュー