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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值