《算法学习与应用 从入门到精通》——填写运算符

题目:

输入五个数,数与数之间用空格分开,然后给出结果,然后在5个数间添加“+”,“-”,“*”,“/”4个运算符,使得等式成立。
例如:
输入:5 5 5 5 5
结果是5:
5+5+5-5-5=5
“+,+,-,-”算一组正确答案

代码

/*填写运算符*/
#include <stdio.h>
int main (void)
{
	int j;
	int i[5];  		//数组i用来表示4个运算符
	int sign;  		//累加运算时的符号
	int result;  	//保存运算式的结果值
	int count=0;  	//计数器,统计符合条件的方案
	int num[6];  	//保存操作数
	float left;  	//保存中间结果左值
	float right;  	//保存中间结果右值
	char oper[5]={' ','+','-','*','/'};  //五种运算符 
	
	printf("输入5个数,之间用空格隔开:");
	for (j=1;j<=5;j++)  //使用for循环输入 
	scanf ("%d",&num[j]);  //循环输入的五个数赋给num数组 
	printf ("输入结果:  ");   
	scanf ("%d",&result);
	for (i[1]=1;i[1]<=4;i[1]++)  //循环4种运算符,1表示+,2表示-,3表示*,4表示/ 
	{
		if((i[1]<4)||(num[2]!=0))  //运算符若是/,则第二个运算数不能为0 
		{
			for (i[2]=1;i[2]<=4;i[2]++)  
			{
				if((i[2]<4)||(num[3]!=0))  //运算符若是/,则第三个数不能为0 
				{
					for (i[3]=1;i[3]<=4;i[3]++)
					{
						if((i[3]<4)||num[4]!=0)  //运算符若是/,则第四个数不能为0 
						{
							for (i[4]=1;i[4]<=4;i[4]++)
							{
								if((i[4]<4)||(num[5]!=0))  //运算符若是/,则第五个数不能为0 
								{
									left = 0;  //初始化左值为0 
									right = num[1];  //初始化右值为num数组的第一个数 
									sign = 1;  //用于累加运算,区别+和- 
									for (j=1;j<=4;j++)  //运用for循环,用于判断两个数之间的符号
									{
										switch (oper[i[j]])  //switch语句,判断运算符进行运算 										                      
										{
											case'+':  //运算符为+时的情况 
											    left=left+sign*right;
												sign=1;
												right=num[j+1];  //将num数组的第二个数赋给right
												break;
											case'-':  //运算符为-时的情况 
											    left=left+sign*right;
												sign=-1;   
												right=num[j+1];  //将num数组的第三个数赋给right
												break;
											case'*':  //运算符为*时的情况 
											    right=right*num[j+1];  //将num数组的第三个数
												break;
											case'/':  //运算符为/时的情况 
											    right=right/num[j+1];
												break; 
										}
									}
									if(left+sign*right==result)
									{
										count++;
										printf("%3d: ",count);
										for (j=1;j<=4;j++)
										printf("%d%c",num[j],oper[i[j]]);
										printf("%d=%d \n",num[5],result);
									}
								}
							}
						}
					}
				}
			}
		 } 
	 } 
	 if(count==0)
	 printf("没有符合要求的方法! \n");

getchar ();
return 0;
}

原文地址:https://www.cnblogs.com/AlexKing007/p/12339348.html