fork download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. int recurs=0;
  5. int result=0;
  6. std::string str="";
  7. std::string sign="";
  8. void count2(int k, std::vector<int> d, int total, int temp, bool flag, unsigned short int pos){
  9. std::string mas="+";
  10. std::string menos="-";
  11. if(pos==(d.size())){
  12. total+=temp;
  13. if(total==k){
  14. result++;
  15. std::cout << sign << "=" << k<<std::endl;
  16. str="";
  17. }
  18. recurs++;
  19. return;
  20. }
  21. //Sum sign.
  22. sign=sign.substr(0,sign.size()-recurs*2);
  23. sign.append(mas+=std::to_string(d[pos]));
  24. count2(k,d,total+temp,+d[pos],true,pos+1);
  25. //Rest sign
  26. sign=sign.substr(0,sign.size()-recurs*2);
  27. sign.append(menos+=std::to_string(d[pos]));
  28. count2(k,d,total+temp,-d[pos],false,pos+1);
  29. //Append digit
  30. if(flag==true)
  31. count2(k,d,total,10*temp-d[pos],true,pos+1);
  32. else
  33. count2(k,d,total,+10*temp+d[pos],false,pos+1);
  34. }
  35.  
  36. int main() {
  37. count2(6,{1,2,3,3,3},0,0,true,0);
  38. // cout << s;
  39. return 0;
  40. }
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
+1+2+3+3-3=6
+3=6
+3-3+3-3-3+3+3=6
+3-3+3-3-3+3+3-3-3+3-3+3-3+3+3-3-3+3-3+3-3-2+3+3+3-3-3+3-3+3-3-3+3+3-3-3+3-3+3-3+3+3-3-3+3-3+3-3+3+3+3-3-3+3-3+3-3-3+3+3-3-3+3-3+3-3+3+3-3-3+3-3+3-3-1+2+3+3+3-3-3+3-3+3-3-3+3+3-3-3+3-3+3-3+3+3-3-3+3-3+3-3-2+3+3+3=6
+3-3+3-3-3+3+3-3-3+3-3+3-3+3+3-3-3+3-3+3-3-2+3+3+3-3-3+3-3+3-3-3+3+3-3-3+3-3+3-3+3+3-3-3+3-3+3-3+3+3+3-3-3+3-3+3-3-3+3+3-3-3+3-3+3-3+3+3-3-3+3-3+3-3-1+2+3+3+3-3-3+3-3+3-3-3+3+3-3-3+3-3+3-3+3+3-3-3+3-3+3-3-2+3+3+3-3-3+3-3+3-3-3+3+3-3-3+3-3+3-3+3+3-3-3+3-3+3-3+3+3+3-3-3+3-3+3-3-3+3+3-3-3+3-3+3-3+3+3-3-3+3-3+3-3+2+3+3+3-3-3+3-3+3-3-3+3+3-3-3+3-3+3-3+3+3-3-3+3-3+3-3-2+3+3+3=6