Java实现蓝桥杯VIP算法训练 二元函数
2023-09-14 08:58:06 时间
试题 算法训练 二元函数
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
令二元函数f(x,y)=ax+by,a和b为整数,求一个表达式S的值。
只有满足以下要求的表达式才是合法的:
1.任意整数x是一个合法的表达式;
2.如果A和B都是合法的表达式,则f(A,B)也是一个合法的表达式。
输入格式
第一行两个数a和b;
第二行一个字符串S表示要求的表达式。
输出格式
一行一个数表示表达式S的值。
样例输入
1 2
f(1,f(1,-1))
样例输出
-1
数据规模和约定
S的长度不超过50,运算过程中所有变量不会超出int的范围。
package 第十次模拟;
import java.util.Scanner;
import java.util.Stack;
public class 二元函数 {
public static void main(String[] args) {
Stack<Integer> num = new Stack<Integer>();
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
sc.nextLine(); //用于消除第一个回车
String str = sc.nextLine(); //输入字符串
try {
if(Integer.valueOf(str)>0){
System.out.println(str);
return;
}
} catch (Exception e) {
// TODO: handle exception
}
char[] s = str.toCharArray(); //转换为数组操作
for(int i =0 ;i < s.length;i++){
if(s[i] == '-'){ //如果是 为负数
i++ ; //使索引指向负号下面一个元素
i = getNumber(num, s, i,false);
}else if(Character.isDigit(s[i])){ //
i = getNumber(num, s, i,true);
}
if(s[i] == ')'){
int x = num.pop();
int y = num.pop();
//x应该是在算式中是靠后的元素,所以应该互换位置
num.push(count(a,b,y,x)) ;
}
}
System.out.println(num.pop());
}
//计算一个f()的值 。
public static int count(int a , int b , int x , int y){
return a*x+b*y;
}
//获取一个完整的数值。 返回一个索引
public static int getNumber(Stack<Integer> stack,char[] s ,int i,Boolean pos){
int number = 0 ;
for(;s[i] != ','&&s[i]!=')';i++){
number = number * 10 +s[i]-'0';
}
if(!pos){
stack.push(-number); //对有符号的进行取反处理
} else
//入栈操作
stack.push(number);
if(s[i] == ' '){
return i ;
}
return i ;
}
}
相关文章
- java random函数用法_JAVA的Random类的用法详解[通俗易懂]
- java打印数组_Java中打印数组的三种方式
- java软件工程师是做什么的_JAVA软件工程师是做什么的?
- java有什么作用_Java有什么用「建议收藏」
- java后端开发需要学什么_从事Java后端开发,要学习哪些知识和技能?[通俗易懂]
- java jersey使用总结_Java Jersey2使用总结
- java九九乘法表代码加解释_java九九乘法表编程代码是什么?
- java实现四种常用排序算法
- java 随机数算法_Java随机数算法原理与实现方法实例详解
- java 优先级队列_JAVA 队列
- java线程dump命令_jdk的dump
- java中静态变量与实例变量有何区别
- java中的堆和栈详解编程语言
- 实现Java程序操作MySQL数据库(java调用mysql)
- Java字节流和字符流的区别及如何区分输入流和输出流
- 策略Java实现Redis过期策略(redisjava过期)
- 使用Java设置Redis密码(redis密码java)
- 使用Java实现MySQL数据恢复操作(java恢复mysql)
- Linux查看Java安装路径:一步一步了解(linux查看java安装路径)
- 使用Java程序执行Linux指令:实现自动化操作(java执行linux命令)
- Java编程从Oracle中读取数据(java读取oracle)
- Redis无法与Java建立连接(redis连不上java)
- Java多线程的用法详解
- JAVA线程用法详解