123456789這九個按順序排列的數,要求在它們之間插入若干個+,-,*,/ ,使其結果正好等於100如 : 1*2*3*4+5+6+7*8+9=100。c++一解

 #include<iostream>

using std::cout;
using std::endl;
enum op
{
pplus, sub, mul, div
};
int method = 1;
int num = 1;
float temS;
op o[9];
void outPut()
{
cout << "Method:" << method++ << endl;
for (int i = 0; i < 8; i++)
{
cout << i + 1;
switch (o[i])
{
case pplus:
cout << "+";
break;
case sub:
cout << "-";
break;
case mul:
cout << "*";
break;
case div:
cout << "/";
break;
}
}
cout << "9=100" << endl;
}
float calculate(float n, op oper, float sum)
{
switch (oper)
{
case pplus:
return n + sum;
case sub:
return n - sum;
case mul:
return n * sum;
case div:
return n / sum;
}
}
void result(float nowSum, float stackN, op stackO)
{
float sum = nowSum;
op oper;
num++;
if (num > 9)
{
sum = calculate(stackN, stackO, sum);
if (sum - 100 < 0.001 && sum - 100 > -0.001)
outPut();
num--;
return;
}
// +
o[num - 2] = pplus;
temS = stackN;
oper = stackO;
sum = calculate(temS, oper, sum);
temS = sum;
sum = num;
result(sum, temS, pplus);
// -
o[num - 2] = sub;
sum = nowSum;
temS = stackN;
oper = stackO;
sum = calculate(temS, oper, sum);
temS = sum;
sum = num;
result(sum, temS, sub);
// *
sum = nowSum;
o[num - 2] = mul;
sum *= num;
result(sum, stackN, stackO);
// /
sum = nowSum;
o[num - 2] = div;
sum /= num;
result(sum, stackN, stackO);
num--;
}
int main()
{
float sum = 1.0, store = 0.0;
result(sum, store, pplus);
return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章