#include
int main()
{
int j; //设置循环变量
int i[5]; //表示4个运算符
int num[6]; // 表示输入的5个数据
int result; // 表示最终验证的结果值
int sign; // 加减运算时的符号
int count=0; // 统计一共有多少种符合的式子
float left,right; // left表示左边的值,也就是算加减法时的值,right表示右边的值,也就是运算时下一个数的值
char oper[5]={' ','+','-','*','/'}; //表示运算符
printf("请输入5个数的值\n");
for(j=1;j<=5;j++)
scanf("%d",&num[j]);
printf("请输入结果值是\n");
scanf("%d",&result);
for(i[1]=1 ; i[1]<=4 ; i[1]++) //循环4种运算符,i[1]=1时,由下面的oper[i[1]]可知表示+号,因此,在这里面,1表示+,2表示-,3表示*,4表示/
{
if( (i[1]<4) || (num[2]!=0) ) //运算符等于4时,也就是为除号时,它后面的数不能为零;如果后面的为零,则前面的运算符不能为除号
{
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; //设置最开始的数值为0
right=num[1]; //设置右边的数,也就是下一个数是多少,这里设置为5个中数的第一个数
sign=1; //运算时符号初始化为正值,用1来表示
for(j=1;j<=4;j++)
{
switch(oper[i[j]]) //判断运算符
{
case '+':
left=left+sign*right; //加减法时的值
right=num[j+1]; //下一个数的值
sign=1;
break;
case '-':
left=left+sign*right;
right=num[j+1];
sign=-1; //实现减法
break;
case '*':
right=right*num[j+1]; //实现乘法,优先级为*高于+-,所以先算右边的数
break;
case '/':
right=right/num[j+1]; //实现除法
break;
}
}
if(left+sign*right==result) //将左边的数和右边的数相加就是最终值,看与验证值是否相等
{
count++;
printf(" 第%d个成立的等式: ",count);
for(j=1;j<=4;j++)
printf("%d%c",num[j],oper[i[j]]); //输出这些数和运算符
printf("%d=%d\n",num[5],result); //输出第5个数和验证值
//此部分输出符合条件的完整表达式
}
}
}
}
}
}
}
}
}
if(count==0) //说明没有符合的,count不变,输出无
printf("没有符合的等式!!!\n");
return 0;
}