在下面的算式中适当地添加“+”,“-”,“*”,“/”运算符,使等式成立(不使用括号)。
分析
由5个数构成的算法,一共需填入4个运算符,而每两个数之间的运算符可有4种选择(加减乘除4种),通过循环程序可枚举填入这4种运算符之一,然后再判断算式是否成立。
注意
- 当填入除号时,要求右侧的数不能为0。
- 乘除的运算符级别比加减高。
AC
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iomanip> //setw头文件
using namespace std;
int main(){
int i[5],j; //循环变量,数组i用来表示4个运算符
int result; //保存运算式的结果值
int count; //计数器,统计符合条件的方案
int num[6]; //保存操作数
float left,right; //保存中间结果
char oper[5]={' ','+','-','*','/'}; //运算符
cout<<"请输入5个数:"<<endl;
for(j=1;j<=5;j++)
cin>>num[j];
cout<<"请输入结果:"<<endl;
cin>>result;
for(i[1]=1;i[1]<=4;i[1]++){
if(i[1]<4||num[2]!=0){
for(i[2]=1;i[2]<=4;i[2]++){
if(i[2]<4||num[3]!=0){
for(i[3]=1;i[3]<=4;i[3]++){
if(i[3]<4||num[4]!=0){
for(i[4]=1;i[4]<=4;i[4]++){
if(i[4]<4||num[5]!=0){
left=0;
right=num[1];
for(j=1;j<=4;j++){
switch(oper[i[j]]){
case '+':
left=left+right;
right=num[j+1];
break; //实现加法
case '-':
left=left-right;
right=num[j+1];
break;
case '*':
right=right*num[j+1];
break;
case '/':
right=right/num[j+1];
break;
}
}
if(left+right==result){
count++;
cout<<setw(3)<<count<<":";
for(j=1;j<=4;j++)
cout<<num[j]<<oper[i[j]];
cout<<num[5]<<"="<<result<<endl;
}
}
}
}
}
}
}
}
}
if(count==0)
cout<<"没有符合要求的方法!"<<endl;
system("pause");
return 0;
}