(百例程式設計)73.和數能表示1~23的5個正整數
阿新 • • 發佈:2019-01-07
已知五個互不相同的正整數之和為23,且從這五個數中挑選若干個加起來可以表示從1到23之內的全部自然數。問這五個數是什麼?
#include <iostream> #include <bitset> #include <vector> using namespace std; void zuhe(int* nData,int len,int cur,int num);//組合函式 vector<int> nVecTmp; bitset<23> bs;//23位來檢測是否能組成23,當每位都為1時就說明可以組成23 int main() { int i,j,m,n,k; int nNum[5] = {0}; for (i=1;i<23;++i) for(j=i+1;j<23;++j) for(m=j+1;m<23;++m) for(n=m+1;n<23;++n) { k = 23-i-j-m-n; if(k>n){ nNum[0] = i; nNum[1] = j; nNum[2] = k; nNum[3] = m; nNum[4] = n; bs.reset(); for(int t=1;t!=6;++t){//窮舉所有的組合 zuhe(nNum,5,0,t); nVecTmp.clear(); } if(bs.count() == 23){ cout<<i<<" "<<j<<" "<<m<<" "<<n<<" "<<k<<endl; } } } return 0; } void zuhe(int* nData,int len,int cur,int num) { if (num == 0){ int t=0; for(size_t i=0;i!=nVecTmp.size();++i){ t += nVecTmp[i]; } bs.set(t-1); } for (int i=cur;i!=len;++i) { nVecTmp.push_back(nData[i]); zuhe(nData,len,i+1,num-1); nVecTmp.pop_back(); } }