想不出来就采用枚举法吧,代码写起来还是很简单的,当然代码写的不怎么样,也不考虑设计效率等等问题了,理论上这种类型的都可以这么拼出来,比较初级的做法,但轻松解决问题。注意Calculate(string expression) 虽然可以作为通用的string转数学算式计算出结果,但是:
1、不支持sin、cos等数学函数
2、不支持[]、{}等括号和除数字、+、-、*、/以外的字符,建议调用计算函数前进行输入的验证。
代码无需多解释,毫无难度。
代码如下(C# winform程序,一个窗体上放个button和memo):

using System;

using System.CodeDom.Compiler;

using System.Reflection;

using System.Text;

using System.Windows.Forms;

using Microsoft.CSharp;

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void simpleButton1_Click(object sender, EventArgs e)

{

int icnt = 0;

string[] ss = new string[100];

for (int i = 0; i < 4; i++)

{

string s = "5";

LinkString(i, ref s);

for (int j = 0; j < 4; j++)

{

string s2 = s;

LinkString(j, ref s2);

for (int m = 0; m < 4; m++)

{

string s3 = s2;

LinkString(m, ref s3);

ss[icnt] = s3 + " = " + Calculate(s3).ToString();

icnt++;

}

}

}

memoEdit1.Lines = ss;

}

private void LinkString(int i, ref string s)

{

if (i == 0)

s = s + " + 5";

else

if (i == 1)

s = s + " - 5";

else

if (i == 2)

s = s + " * 5";

else

s = s + " / 5";

}

/// <summary>

/// 接受一个string类型的表达式并计算结果,返回一个object对象,静态方法

/// </summary>

/// <param name="expression"></param>

/// <returns></returns>

public static object Calculate(string expression)

{

string className = "Calc";

string methodName = "Run";

expression = expression.Replace("/", "*1.0/");

// 创建编译器实例。

ICodeCompiler complier = (new CSharpCodeProvider().CreateCompiler());

// 设置编译参数。

CompilerParameters paras = new CompilerParameters();

paras.GenerateExecutable = false;

paras.GenerateInMemory = true;

// 创建动态代码。

StringBuilder classSource = new StringBuilder();

classSource.Append("public class " + className + "\n");

classSource.Append("{\n");

classSource.Append(" public object " + methodName + "()\n");

classSource.Append(" {\n");

classSource.Append(" return " + expression + ";\n");

classSource.Append(" }\n");

classSource.Append("}");

// 编译代码。

CompilerResults result = complier.CompileAssemblyFromSource(paras,classSource.ToString());

// 获取编译后的程序集。

Assembly assembly = result.CompiledAssembly;

// 动态调用方法。

object eval = assembly.CreateInstance(className);

MethodInfo method = eval.GetType().GetMethod(methodName);

object reobj = method.Invoke(eval, null);

GC.Collect();

return reobj;

}

}

}

结果如下:

5 + 5 + 5 + 5 = 20
5 + 5 + 5 - 5 = 10
5 + 5 + 5 * 5 = 35
5 + 5 + 5 / 5 = 11
5 + 5 - 5 + 5 = 10
5 + 5 - 5 - 5 = 0
5 + 5 - 5 * 5 = -15
5 + 5 - 5 / 5 = 9
5 + 5 * 5 + 5 = 35
5 + 5 * 5 - 5 = 25
5 + 5 * 5 * 5 = 130
5 + 5 * 5 / 5 = 10
5 + 5 / 5 + 5 = 11
5 + 5 / 5 - 5 = 1
5 + 5 / 5 * 5 = 10
5 + 5 / 5 / 5 = 5.2
5 - 5 + 5 + 5 = 10
5 - 5 + 5 - 5 = 0
5 - 5 + 5 * 5 = 25
5 - 5 + 5 / 5 = 1
5 - 5 - 5 + 5 = 0
5 - 5 - 5 - 5 = -10
5 - 5 - 5 * 5 = -25
5 - 5 - 5 / 5 = -1
5 - 5 * 5 + 5 = -15
5 - 5 * 5 - 5 = -25
5 - 5 * 5 * 5 = -120
5 - 5 * 5 / 5 = 0
5 - 5 / 5 + 5 = 9
5 - 5 / 5 - 5 = -1
5 - 5 / 5 * 5 = 0
5 - 5 / 5 / 5 = 4.8
5 * 5 + 5 + 5 = 35
5 * 5 + 5 - 5 = 25
5 * 5 + 5 * 5 = 50
5 * 5 + 5 / 5 = 26
5 * 5 - 5 + 5 = 25
5 * 5 - 5 - 5 = 15
5 * 5 - 5 * 5 = 0
5 * 5 - 5 / 5 = 24
5 * 5 * 5 + 5 = 130
5 * 5 * 5 - 5 = 120
5 * 5 * 5 * 5 = 625
5 * 5 * 5 / 5 = 25
5 * 5 / 5 + 5 = 10
5 * 5 / 5 - 5 = 0
5 * 5 / 5 * 5 = 25
5 * 5 / 5 / 5 = 1
5 / 5 + 5 + 5 = 11
5 / 5 + 5 - 5 = 1
5 / 5 + 5 * 5 = 26
5 / 5 + 5 / 5 = 2
5 / 5 - 5 + 5 = 1
5 / 5 - 5 - 5 = -9
5 / 5 - 5 * 5 = -24
5 / 5 - 5 / 5 = 0
5 / 5 * 5 + 5 = 10
5 / 5 * 5 - 5 = 0
5 / 5 * 5 * 5 = 25
5 / 5 * 5 / 5 = 1
5 / 5 / 5 + 5 = 5.2
5 / 5 / 5 - 5 = -4.8
5 / 5 / 5 * 5 = 1
5 / 5 / 5 / 5 = 0.04
 
可以看出图片中后2个算式不可能成立。

c#根据公式进行自动计算 四个5加减乘除=4的更多相关文章

  1. JAVA实现EXCEL公式专题(四)——字符串函数

    直接上代码: /** * 项目名称: * 文件说明: ExCEL公式类型:字符串公式 * 主要特点: * 版本:1.0 * 制作人:刘晨曦 * 创建时间:2013-12-3 **/ package E ...

  2. poj 1348 Computing (四个数的加减乘除四则运算)

    http://poj.org/problem?id=1348 Computing Time Limit: 1000MS   Memory Limit: 10000K Total Submissions ...

  3. 在word 2013中输入latex公式

    注意:版权所有,转载请注明出处 向word输入LaTeX公式,插件有很多,前面在使用的是一个叫做Aurora的插件,结果不是免费的,用了一段时间就要收费是,所以就不用了,从网上找到别人的介绍,可以使用 ...

  4. 目标检测(四)Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

    作者:Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun SPPnet.Fast R-CNN等目标检测算法已经大幅降低了目标检测网络的运行时间. ...

  5. 算法进阶面试题06——实现LFU缓存算法、计算带括号的公式、介绍和实现跳表结构

    接着第四课的内容,主要讲LFU.表达式计算和跳表 第一题 上一题实现了LRU缓存算法,LFU也是一个著名的缓存算法 自行了解之后实现LFU中的set 和 get 要求:两个方法的时间复杂度都为O(1) ...

  6. MathType中公式不对齐怎么办

    MathType是一款专门用来编辑数学公式的数学公式编辑器,利用它可以在文档中快速编辑公式,与文字完美结合,可以编辑出各种各样的数学符号与公式,省下你不少的时间. 一.对齐上标与下标 MathType ...

  7. c/c++优化结构控制

    一.表达式优化--使用替换程序中的乘除法 c/c++中的加减运算效率远远高于乘除运算,由于移位指令的执行速度和乘除法差不多,所以可以使用移位的方式来替换程序中的乘除法.一个数向右移一位,等于该数乘以2 ...

  8. 【转】Matlab练习程序(各向异性扩散)

    http://www.cnblogs.com/tiandsp/archive/2013/04/18/3029468.html 主要是用来平滑图像的,克服了高斯模糊的缺陷,各向异性扩散在平滑图像时是保留 ...

  9. NPOI之使用EXCEL模板创建报表

    因为项目中要用到服务器端创建EXCEL模板 无法直接调用EXCEL 查了下发现NPOI很方便很简单就实现了 其中走了点弯路 第一次弄的时候发现输出的值是文本不是数字型无法直接计算公式 然后又发现打开报 ...

随机推荐

  1. OkHttp 3.4入门

    OkHttp 3.4入门 配置方法 (一)导入Jar包http://repo1.maven.org/maven2/com/squareup/okhttp3/okhttp/3.4.0-RC1/okhtt ...

  2. 【BZOJ 4569】【SCOI 2016】萌萌哒

    http://www.lydsy.com/JudgeOnline/problem.php?id=4569 用ST表表示所有区间,根据ST表中表示的区间长度种一棵nlogn的树,类似线段树,每个节点的左 ...

  3. 纯CSS下拉导航菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="h ...

  4. hdu 2069 限制个数的母函数(普通型)

    Coin Change Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  5. 基于Oracle的Mybatis 批量插入

    项目中会遇到这样的情况,一次性要插入多条数据到数据库中,有两种插入方法: 方法一: Mybatis本身只支持逐条插入,比较笨的方法,就是遍历一个List,循环中逐条插入,比如下面这段代码 for(Da ...

  6. java内存空间详解

    Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识.一般 ...

  7. 【CodeForces 697B】Barnicle

    对科学计数法表示的数,输出其10进制的形式. c++来做,需要考虑这些细节: 当b==0,d==0时,只输出a. 当不需要补零的情况有两种: 一种是刚好是整数,只输出a(注意1.0e1的情况是输出1) ...

  8. struts2 action 页面跳转

    struts2 action 页面跳转 标签: actionstruts2redirect 2013-11-06 16:22 20148人阅读 评论(0) 收藏 举报 (1)type="di ...

  9. yum综合梳理

    1.安装软件包: yum install package yum localinstall package #从本机目录安装软件包 yum groupinstall group #安装某个组件的全部软 ...

  10. js-JavaScript高级程序设计学习笔记12

    第十五章 使用canvas绘图 1.要使用<canvas>元素,必须先设置其width和height属性. 2.要在这块画布上绘图,需要先取得绘图上下文,取得绘图上下文对象的引用,需要调用 ...