题目:
输入五个数,数与数之间用空格分开,然后给出结果,然后在5个数间添加“+”,“-”,“*”,“/”4个运算符,使得等式成立。
例如:
输入:5 5 5 5 5
结果是5:
5+5+5-5-5=5
“+,+,-,-”算一组正确答案
解题思路:
注意问题
首先我们要清楚,一旦将四个符号填写到四个空格中会形成一个四则运算恒等式,在四则运算中我们要注意俩个问题: - 乘和除法优先级要高于加减法 - 0不能作为除数 所以在编码的时候一定要先考虑这俩个问题。
总体思路
对于这种问题需要用到枚举的思想,也就是遍历所有的符号分配方式,判断是否满足结果,若满足则视为一个合理的分配方案进行输出。
详细设计
♦ 我们所研究的对象是符号分配,所以要将注意力放在符号上,为了方便在后边判断符号添加的合理性,我们最好要有将符号存储在一个字符数组中的意识。且还需要一个数组用来存放符号数组中所有排列组合的下标集(0代表‘+’;1代表‘-’;2代表‘*’;3代表‘/’),然后对每一组进行循环排查。
♦除数不能是0
通过一个判断语句进行筛选,当下标大于3时下一个数不能是0。
♦优先级
设置俩个变量,一个负责加减,另一个负责乘除,最后进行合并。
代码实现:
// 2017_6_26_Tian.cpp : 定义控制台应用程序的入口点。
//
/**
*填写运算符:在5 5 5 5 5=5 中添加“+”,“-”,“*”,“/”4个运算符,使得等式成立
*/
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int num[5];//用于存放输入的数字集
char mark[4]={
'+','-','*','/'};//用于存放运算符集
int myMark[4]; //用于存放四个数字:0代表‘+’;1代表‘-’;2代表‘*’;3代表‘/’
int result;//用于存放运算结果
int sign;//用于存放运算符
float left=0,right=1;//left存放上一步运算结果
int count=0;//用于记录结果数
printf("请输入5个整数,中间用空格隔开:");
for(