您的位置:首页 > 其它

判断表达式

2015-06-09 20:14 302 查看
Q:给定如下表达式\[3?4?7?8=n\]其中\(?\)可以是加(\(+\))减(\(-\))乘(\(*\))除(\(/\)),输入整数\(n\),求使得该式成立的所有表达式,其中3,4,7,8的顺序可以相互调换,每个数字用且只能用一次,如果没有满足的表达式,输出无解。
Example 0
Input:55
Output:
7*3-8-4=9
7*3-4-8=9
3*7-4-8=9
3*7-8-4=9
Example 1
Input 10
Output
无解
Solution(最暴力的遍历,有好算法求交流)

#include<iostream>
using namespace std;
float operat(int n,float a,float b)
{
if(n==0)
return a+b;
else if(n==1)
return a-b;
else if(n==2)
return a*b;
else if(n==3)
{
float y=float(a)/b;
return y;
}
}
int number(int x)
{
int d;
if(x==0) d=8;
else if(x==1)d=7;
else if(x==2)d=4;
else if(x==3) d=3;
return d;
}
int main()
{
//0+,1-,2*,3/
//3i4j7k8=10
int result;
cout<<"please input the result you want:"<<endl;
cin>>result;
int flag=0;
int count=0;

float temp1,temp2,temp3;
float a[4];

for(int p=0;p<4;p++)
{
for(int q=0;q<4;q++)
{
if(q==p) {}
else
{
for(int s=0;s<4 ;s++)
{
if(s==p || s==q) {}
else
{
for(int t=0;t<4;t++)
{
if(t==p || t==q || t==s) {}
else
{
a[0]=number(p);a[1]=number(q);
a[2]=number(s);a[3]=number(t);
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
for(int k=0;k<4;k++)
{
if(i>=j && i>=k)
{// 3 4 7 8
temp1=operat(i,a[0],a[1]);
if(j>=k)
{
temp2=operat(j,temp1,a[2]);
temp3=operat(k,temp2,a[3]);
}
else
{
temp2=operat(k,a[2],a[3]);
temp3=operat(j,temp1,temp2);
}
}
else if(j>i && j>=k)
{
temp1=operat(j,a[1],a[2]);
if(i>=k)
{
temp2=operat(i,a[0],temp1);
temp3=operat(k,temp2,a[3]);
}
else
{
temp2=operat(k,temp1,a[3]);
temp3=operat(i,a[0],temp2);
}
}
else
{
temp1=operat(k,a[2],a[3]);
if(i>=j)
{
temp2=operat(i,a[0],a[1]);
temp3=operat(j,temp2,temp1);
}
else
{
temp2=operat(j,a[1],temp1);
temp3=operat(i,a[0],temp2);
}
}
if(temp3==result)
{
flag=1;
count++;
cout<<a[0];
if(i==0) cout<<"+";
else if(i==1)cout<<"-";
else if(i==2) cout<<"*";
else if(i==3) cout<<"/";
cout<<a[1];
if(j==0) cout<<"+";
else if(j==1)cout<<"-";
else if(j==2) cout<<"*";
else if(j==3) cout<<"/";
cout<<a[2];
if(k==0) cout<<"+";
else if(k==1)cout<<"-";
else if(k==2) cout<<"*";
else if(k==3) cout<<"/";
cout<<a[3]<<"="<<temp3<<endl;
//break;
}
}
}
}
//////////
}
}
}
}
}
}
}
if(flag==1) cout<<count<<endl;
if(flag==0) cout<<"无解"<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: