文档章节

在1-9(1 2 3 4 5 6 7 8 9)中添加加减乘除或者什么都不加使结果等于100 ,穷举所有可能

FinalSmart
 FinalSmart
发布于 2017/08/01 14:03
字数 1544
阅读 48
收藏 0
点赞 0
评论 0

算法思路:

        在数字1-9之间可以有8个操作符,没个操作符可以是:空、加、减、乘、除,分别用数字0-5表示,用随机函数生成8个操作符,计算9个操作数和8个操作符的结果,如果结果为100(考虑乘除法带来的误差,误差范围0.01),输出结果(去除重复,操作数用float型保证除法时数据不会丢失);

 源码如下:

package test;

import java.util.ArrayList;
import java.util.List;

public class RandomCalculator {

	float num[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int a[] = new int[8];
	int size = 8;

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		List<String> strs = new ArrayList<String>(); // 存储有效解
		String str; // 当前有效解
		int i;
		RandomCalculator rc;
		for (int n = 0; n < 0xFFFFFFF; n++) {
			rc = new RandomCalculator();
			// 获取操作符合
			rc.getOperator(rc.a);
			// 操作符转换表示
			str = rc.getFunStr();

			// 处理空操作符
			for (i = 0; i < rc.size; i++) {
				if (rc.a[i] == 0) {
					rc.dealOperator(i, rc.a[i]);
					i--;
				}
			}

			// 处理乘除法
			for (i = 0; i < rc.size; i++) {
				if (rc.a[i] >= 3) {
					rc.dealOperator(i, rc.a[i]);
					i--;
				}
			}

			// 处理加减法
			for (i = 0; i < rc.size; i++) {
				rc.dealOperator(i, rc.a[i]);
				i--;
			}

			if (notExist(strs, str) && 99.990 < rc.num[0] && rc.num[0] < 100.001) {
				strs.add(str); // 记录已经出现的
				System.out.print("\n" + strs.size() + ":" + str + "=100\n");
			}
		}

	}

	private static boolean notExist(List<String> strs, String str) {
		for (int i = 0; i < strs.size(); i++) {
			if (null != strs && strs.get(i).equals(str))
				return false;
		}
		return true;
	}

	// 获取操作符
	public void getOperator(int a[]) {
		// 生成八个操作符,0表示没有,1表示加,2表示减,3表示乘,4表示除
		for (int i = 0; i < 8; i++)
			 a[i] = (int)Math.floor(Math.random()*5);
//			a[i] = (int) Math.floor(Math.random() * 4) + 1; // 不包含空操作符的情况
	}

	// 处理操作符
	public void dealOperator(int n, int i) {
		switch (i) {
		case 0: // 无符号
			num[n] = num[n] * 10 + num[n + 1];
			break;
		case 1: // 加法
			num[n] += num[n + 1];
			break;
		case 2: // 减法
			num[n] -= num[n + 1];
			break;
		case 3: // 乘法
			num[n] *= num[n + 1];
			break;
		case 4: // 除法
			num[n] /= num[n + 1];
			break;
		default:
			break;
		}
		for (int j = n + 1; j < size; j++) {
			num[j] = num[j + 1];
			a[j - 1] = a[j];
		}
		size--;
	}

	public String getFunStr() {
		String str = "";
		int i;
		for (i = 0; i < size; i++) {
			switch (a[i]) {
			case 0:
				str += (int) num[i];
				break;
			case 1:
				str += (int) num[i] + "+";
				break;
			case 2:
				str += (int) num[i] + "-";
				break;
			case 3:
				str += (int) num[i] + "*";
				break;
			case 4:
				str += (int) num[i] + "/";
				break;
			}
		}
		str += (int) num[i];
		return str;
	}

}

结果如下:

1:1*234+5-67-8*9=100
2:1*2*3-4+5+6+78+9=100
3:1*23+4+5+67-8+9=100
4:1-23+4*5+6+7+89=100
5:1-2-34+56+7+8*9=100
6:1/2*3/4*56+7+8*9=100
7:1/2*34-5+6-7+89=100
8:1+23*4-5+6+7+8-9=100
9:123+45-67+8-9=100
10:12/3+4*5*6-7-8-9=100
11:1*2*3*4+5+6+7*8+9=100
12:1-2+3*4+5+67+8+9=100
13:12*3-4-5-6+7+8*9=100
14:1+2+3-45+67+8*9=100
15:12+3+4-56/7+89=100
16:1+2*3*4*5/6+7+8*9=100
17:1*23*4-56/7/8+9=100
18:1-2*3+4*5+6+7+8*9=100
19:1+234-56-7-8*9=100
20:12-3-4+5-6+7+89=100
21:1+2+34*5+6-7-8*9=100
22:1+23-4+56+7+8+9=100
23:1-2-3+45-6+7*8+9=100
24:12/3/4+5*6+78-9=100
25:1+2+3+4+5+6+7+8*9=100
26:1+2*3+4*5-6+7+8*9=100
27:1+234*5/6-7-89=100
28:123+4*5-6*7+8-9=100
29:1+2+3*4*56/7-8+9=100
30:1-2-3+45-6-7+8*9=100
31:1/2/3*456+7+8+9=100
32:1+23*4+56/7+8-9=100
33:1+2+3-4*5+6*7+8*9=100
34:1*2*3-4*5+6*7+8*9=100
35:12+3*4-5-6+78+9=100
36:12+34-5+6*7+8+9=100
37:12-3+4*5+6+7*8+9=100
38:1*2*34+56-7-8-9=100
39:123-4-5-6-7+8-9=100
40:1+23*4+5-6+7-8+9=100
41:12+3*4+5+6-7+8*9=100
42:1+2+3*4*5/6+78+9=100
43:1*2+34-56/7+8*9=100
44:12-3-4+5*6+7*8+9=100
45:12*3-4*5+67+8+9=100
46:1*2-3+4+56/7+89=100
47:123+4-5+67-89=100
48:123-45-67+89=100
49:1*2/3+4*5/6+7+89=100
50:12+34-5-6+7*8+9=100
51:1+2-3*4+5*6+7+8*9=100
52:1-2+3+45+6+7*8-9=100
53:12+3*45+6*7-89=100
54:1*2+3-4+5*6+78-9=100
55:1-2*3-4+5*6+7+8*9=100
56:1*2*3*4+5+6-7+8*9=100
57:1*2*3-45+67+8*9=100
58:1*2+3+4*5+6+78-9=100
59:1-2+3*4*5+6*7+8-9=100
60:12-3/4/5-6/7+89=100
61:1-2*3-4-5+6*7+8*9=100
62:1+23-4+5+6+78-9=100
63:1*23+4+56/7*8+9=100
64:1*2+3+45+67-8-9=100
65:12+3+4+5-6-7+89=100
66:1+2*34-56+78+9=100
67:1*2*3+4+5+6+7+8*9=100
68:12+34-5-6-7+8*9=100
69:1*2+34+5+6*7+8+9=100
70:1+23-4-5+6+7+8*9=100
71:1*2+34+56+7-8+9=100
72:1-23-4+5*6+7+89=100
73:1*2-3+4-5+6+7+89=100
74:12-3+4*5+6-7+8*9=100
75:1*2*3*4-5-6+78+9=100
76:1+2+34-5+67-8+9=100
77:1-2-3+4*56/7+8*9=100
78:12+3*4+5+6+7*8+9=100
79:1*2-3+4*5-6+78+9=100
80:1+2+3*4-5-6+7+89=100
81:1+23-4+56/7+8*9=100
82:1-2+3*4*5-6+7*8-9=100
83:1-23-4-5+6*7+89=100
84:1+234*5*6/78+9=100
85:1*2+34+5-6-7+8*9=100
86:1+2+3-4+5+6+78+9=100
87:12*3-4+5-6+78-9=100
88:12/3+4*5-6-7+89=100
89:1+2*3-4-5+6+7+89=100
90:1-2-3+4*5+67+8+9=100
91:1*23-4-56/7+89=100
92:12+3-4+5+67+8+9=100
93:12/3+4*5*6*7/8-9=100
94:1*23-4+5-6-7+89=100
95:1-2-3+45+6*7+8+9=100
96:12+34+5*6+7+8+9=100
97:1*2+34+5-6+7*8+9=100
98:12-3-4+5*6-7+8*9=100
99:1*2+3*4+5-6+78+9=100
100:1+2*3-4+56/7+89=100
101:1+2*3+4+5+67+8+9=100
102:1+2-3*4-5+6*7+8*9=100

 

本文转载自:

共有 人打赏支持
FinalSmart
粉丝 1
博文 26
码字总数 29512
作品 0
成都
【算法】算法的艺术(二)

国民生产总值多少年翻番?    假设我国工农业总产值以每年9%的速度增长,问多少年翻一番?    实例解析:    翻一番意味着变为原来的两倍,而每年只能增加9%,相当于每年乘上一个1...

wbf961127
2017/11/08
0
0
黑马程序员.bobo.DAY.2

class VarDemo{public static void main(String[] args){System.out.println(60);System.out.println(0x3c);}} 11002(0)+12(1)+12(2)= 数值2(0)+数值2(1)+数值2(2) 0 0 1 1 0 1 0 1 =128 64 ......

BobbyLou
2015/05/14
0
0
九位不同数字乘法等式的递归与非递归回溯算法(一)

摘 要:本文对“九位不同数字构成乘法等式”的问题进行分析,设计了递归回溯算法和非递归回溯算法,给出NP问题穷举算法设计的一般思路,同时比较两种算法的特点,并进行实验测试. 关键词:穷...

余二五
2017/11/16
0
0
shell脚本中的双括号用法

在刚开始学习inux shell脚本编程时候,对于它的 四则运算以及逻辑运算。估计很多朋友都感觉比较难以接受。特变逻辑运算符”[]”使用时候,必须保证运算符与算数 之间有空格。 四则运算也只能...

zhangyujsj
2016/06/27
33
0
C语言中的二进制、八进制、十六进制详解

在数学计算中,二进制计数系统的公分母是最小的,它以2为基数。你还记得在小学或中学时所学的不同的计数系统吗?笔者在上小学时,曾在一堂数学课中学过以6为基数的计数系统;你先数1,2,3,4...

---BearWolf
2013/11/25
0
0
【算法】算法的艺术(六)

报数游戏    n个小孩围成一圈,从1开始报数,报到k的人退出,其余人重新从1报数,仍是报到k退出,直到圈中只剩m个小孩,问最后剩下的是哪些人?   实例解析:   本题在这里将借助于数...

wbf961127
2017/11/07
0
0
【算法趣题】Q13 有多少种满足字母算式的解法

引言 【算法趣题】是来自图灵程序设计丛书绝云译的《程序员的算法趣题》,书中是用Ruby实现的。这里是用python来实现。 问题描述 字母算式,就是用字母表示的算式,其规则是:相同字母对应相...

_缘君_
05/03
0
0
单引号、双引号和不加引号区别

把内容输出出来,可能不会将含有空格的 说一下单引号、双引号和不加引号区别 总结说明: 单引号: 可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输...

大凯哥517
2017/05/05
0
0
iOS小技巧总结

原文出处:iOS小松哥 在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新。 UITableView的Group样式下顶部空白处理 1 UITableView的plain样式下,取消区头停滞效果 1 2 3 4 ...

秦无炎
2016/12/07
6
0
小朋友学经典算法(8):求组合数

关于组合的介绍,可以参考小朋友学奥数(12):组合 一、利用基本公式,递归 运行结果: 分析:  C(10, 3) = C(10, 2) 8 / 3 = C(10, 1) 9 8 / (3 2) = C(10, 0) 10 9 8 / (3 2 1) = 1 10 ...

海天一树X
06/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

流利阅读笔记29-20180718待学习

高等教育未来成谜,前景到底在哪里? Ray 2018-07-18 1.今日导读 在这个信息爆炸的年代,获取知识是一件越来越容易的事情。人们曾经认为,如此的时代进步会给高等教育带来众多便利。但事实的...

aibinxiao
21分钟前
7
0
第15章FTP服务搭建与配置

15.1FTP介绍 FTP多用于Windows传文件到linux rz sz在文件超过4G,就无法使用了——>安装包yum install -y install lrzsz rz把 window 上的文件传输到 linux 上 sz 把 linux 上的文件传输到 ...

Linux学习笔记
29分钟前
0
0
OSChina 周三乱弹 —— 你被我从 osc 老婆们名单中踢出了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小鱼丁:分享五月天的单曲《后来的我们 (电影《后来的我们》片名曲)》: 《后来的我们 (电影《后来的我们》片名曲)》- 五月天 手机党少年们想...

小小编辑
34分钟前
7
1
Spring Boot Admin 2.0开箱体验

概述 在我之前的 《Spring Boot应用监控实战》 一文中,讲述了如何利用 Spring Boot Admin 1.5.X 版本来可视化地监控 Spring Boot 应用。说时迟,那时快,现在 Spring Boot Admin 都更新到 ...

CodeSheep
53分钟前
0
0
Python + Selenium + Chrome 使用代理 auth 的用户名密码授权

米扑代理,全球领导的代理品牌,专注代理行业近十年,提供开放、私密、独享代理,并可免费试用 米扑代理官网:https://proxy.mimvp.com 本文示例,是结合米扑代理的私密、独享、开放代理,专...

sunboy2050
今天
0
0
实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
1
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部