所以我有這個函數和這些全局變量。在遞歸函數中打印C++中的累加和
int recurs=0;
std::string sign="";
void count2(int k, std::vector<int> d, int total, int temp, bool flag, unsigned short int pos){
std::string mas="+";
std::string menos="-";
if(pos==(d.size())){
total+=temp;
if(total==k){
result++;
std::cout << sign << "=" << k<<std::endl;
str="";
}
recurs++;
return;
}
//Sum sign.
sign=sign.substr(0,sign.size()-recurs*2);
sign.append(mas+=std::to_string(d[pos]));
count2(k,d,total+temp,+d[pos],true,pos+1);
//Rest sign
sign=sign.substr(0,sign.size()-recurs*2);
sign.append(menos+=std::to_string(d[pos]));
count2(k,d,total+temp,-d[pos],false,pos+1);
//Append digit
if(flag==true)
count2(k,d,total,10*temp-d[pos],true,pos+1);
else
count2(k,d,total,+10*temp+d[pos],false,pos+1);
}
的函數被調用是這樣的: count2(6,{1,2,3,3,3},0,0,true,0);
做些什麼:對矢量V,它是這個組合等於第一個參數,使資金和substractions和號碼,每次的組合,全局變量result
增加。例如,count2(6,{1,2,3,3,3},0,0,true,0);
將使result
爲5.由於有5種方式與這些數字相加/子6,例如:1+2+3+3-3
1+2-3+3+3
等等。它完美的作品。另外,不使用可變字符串str
。
出了什麼問題?沒什麼,但我想看看哪些組合是。我想功能打印這樣想:
1+2+3+3-3
1+2-3+3+3
-1-2+3+3+3
1+2+3-3+3
問題是什麼?我想知道如何正確打印使總數等於k的操作符。 如果您是run this code in ideone,它會打印:YES,這是我的實際結果。但是,是不正確的,因爲沒有和諸如+3或+ 3 + 3 + 3 + 3 + 3 + 3 + ....
+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
正確的結果可以樣子:
1+2+3+3-3
1+2+3-3+3
1+2-3+3+3
〜12 + 3 + 3 + 3
回答過的問題!
什麼問題? –
@NeilKirk如何打印正確的操作?像'1 + 2 + 3 + 3-3 1 + 2-3 + 3 + 3 -1-2 + 3 + 3 + 3 1 + 2 + 3-3 + 3等等。 –
通過按值傳遞向量d,您正在複製它幾次。這是低效的。通過const引用傳遞。您應該返回結果而不是修改全局變量。爲什麼mas和menos不是局部變量? –