zoukankan      html  css  js  c++  java
  • Java实现 蓝桥杯VIP 算法训练 二元函数

    问题描述

    令二元函数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的范围。

    PS:
    测试数据搞心态???

    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 ;
    	   }
    
    
    }
    
    
    
  • 相关阅读:
    ZOJ 3332 Strange Country II
    ZOJ 3331 Process the Tasks(双塔DP)
    ZOJ 3326 An Awful Problem(模拟)
    HDU 1796 How many integers can you find(容斥原理)
    HDU 4059 The Boss on Mars(容斥原理)
    HDU 4135 Co-prime(容斥原理)
    HDU 5677 ztr loves substring(回文串加多重背包)
    CodeForces 668B Little Artem and Dance
    CodeForces 667A Pouring Rain
    Java实现 LeetCode 764 最大加号标志(暴力递推)
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13078737.html
Copyright © 2011-2022 走看看