java使用集合编写程序求123456789之间随机位置放加减,使表达式的和为100

先写一个方法生成1-9随机位置放加减的字符串

public static String getstr(){
    Random rand = new Random();
    StringBuilder sbu = new StringBuilder("1");
    String[] op = {"","+","-"};
    for(int i = 2; i < 10; i++){
        sbu.append(String.format("%s%d",op[rand.nextInt(op.length)],i));
    }
    return sbu.toString();

}

使用这个方法生成字符串并判断和是否为100;

public static void main(String[] args){
    while(true){
        String str = getstr();
        Pattern p = Pattern.compile("-?\\d+");
        Matcher m = p.matcher(str);
        int sum = 0;
        while (m.find()){
            sum += Integer.valueOf(m.group());
        }
        if(sum == 100){
            System.out.printf("%s = %d%n",str,sum);
            break;
        }
    }
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于递归的算术表达式值的C语言程序: ```c #include <stdio.h> #include <stdlib.h> #include <ctype.h> int index = 0; // 全局索引变量 char* expression; // 存储表达式的字符串 int evaluateExpression(); int evaluateTerm(); int evaluateFactor(); int main() { expression = (char*)malloc(sizeof(char) * 100); // 为表达式字符串分配内存空间 printf("请输入一个包含加减乘除和括号的算术表达式:\n"); scanf("%s", expression); printf("表达式的结果是:%d\n", evaluateExpression()); // 调用 evaluateExpression() 函数值 free(expression); // 释内存空间 return 0; } // 函数 evaluateExpression() 对表达式进行值 int evaluateExpression() { int value = evaluateTerm(); // 调用 evaluateTerm() 函数出左操作数的值 while (expression[index] == '+' || expression[index] == '-') { // 遍历表达式中的运算符 char operator = expression[index++]; // 获取当前运算符 int term = evaluateTerm(); // 调用 evaluateTerm() 函数出右操作数的值 if (operator == '+') { value += term; // 执行加法运算 } else { value -= term; // 执行减法运算 } } return value; } // 函数 evaluateTerm() 对表达式中的乘除运算进行值 int evaluateTerm() { int value = evaluateFactor(); // 调用 evaluateFactor() 函数出左操作数的值 while (expression[index] == '*' || expression[index] == '/') { // 遍历表达式中的运算符 char operator = expression[index++]; // 获取当前运算符 int factor = evaluateFactor(); // 调用 evaluateFactor() 函数出右操作数的值 if (operator == '*') { value *= factor; // 执行乘法运算 } else { value /= factor; // 执行除法运算 } } return value; } // 函数 evaluateFactor() 对表达式中的因子进行值 int evaluateFactor() { int value; if (expression[index] == '(') { // 如果当前字符是左括号,则调用 evaluateExpression() 函数出括号内的表达式的值 index++; value = evaluateExpression(); index++; // 跳过右括号 } else { // 否则,当前字符为数字字符,将其转换成整数类型 value = 0; while (isdigit(expression[index])) { // 遍历数字字符 value = value * 10 + (expression[index] - '0'); // 将字符转换成数字 index++; } } return value; } ``` 这个程序使用了三个递归函数,分别是 `evaluateExpression()`、`evaluateTerm()` 和 `evaluateFactor()`,分别对表达式、乘除运算和因子进行值。程序首先读入一个包含加减乘除和括号的算术表达式,然后调用 `evaluateExpression()` 函数对表达式进行值,并返回结果。在 `evaluateExpression()` 函数中,程序首先调用 `evaluateTerm()` 函数出左操作数的值,然后遍历表达式中的运算符,执行加法或减法运算。在 `evaluateTerm()` 函数中,程序首先调用 `evaluateFactor()` 函数出左操作数的值,然后遍历表达式中的运算符,执行乘法或除法运算。在 `evaluateFactor()` 函数中,程序首先判断当前字符是左括号还是数字字符,如果是左括号,则调用 `evaluateExpression()` 函数出括号内的表达式的值,否则将当前字符转换成整数类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值