求123456789 字符串1..9 之间不改数字位置随机+-要求表达结果和为100,写出这样表达式
package demo;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import java.util.regex.Pattern;
/**
* @author yeqv
* @program A2
* @Classname a3
* @Date 2022/1/13 17:17
* @Email w16638771062@163.com
*/
public class a3 {
public static void main(String[] args) {
//定义一个集合
Set<String> set = new HashSet<String>();
int index = 0;
while (true) {
//定义一个字符类型的数组
String[] s1 = {"", "+", "-"};
//实例化一个随机生成器对象
Random rand = new Random();
//实例化一个字符串类型的构造器对象第一位是字符串“1”
StringBuilder sbu = new StringBuilder("1");
//定义一个循环,最大数是9
for (int i = 2; i <= 9; i++) {
//向字符串构造器“sbu”中随机插入数组s1中的一个字符串
sbu.append(s1[rand.nextInt(s1.length)]);
//向构造器中插入当前循环的数字i
sbu.append(i);
}
//利用正则表达式制定一个格式,每一段开头是+-或者空,后面是0-9之间的数字,例如
// 12+345-6+78-9
var p3 = Pattern.compile("[+-]*[0-9]+");
//将字符串构造器内的字符串与格式匹配
var m3 = p3.matcher(sbu);
//定以一个int类型的变量当作式子的和
int sum = 0;
//将构造器中的字符串按顺序判断是否与格式匹配
while (m3.find()) {
//将子序列字符串转换为int类型赋值与num
int num = Integer.parseInt(m3.group());
//将转换后的式子相加
sum += num;
}
//判断式子的和是否为100并且集合中不能包含sbu这个字符串
if (sum == 100 && !set.contains(sbu.toString())) {
//输出序列和式子
System.out.printf("%d、%s = 100%n", ++index, sbu);
//将字符串添加到集合set中
set.add(sbu.toString());
}
//判断集合中的字符串数量够10个结束
if (set.size() == 10) {
break;
}
}
}
}