2018笔试题——求一元一次方程的解

来源:互联网 发布:淘宝电脑端宽屏专修 编辑:程序博客网 时间:2024/06/06 00:43

给出一个没有简化的一元一次方程的解,如果方程没有解,返回“No solution”;如果方程有无穷解,返回“Infinite solutions”。如果这个方程只有一个解,返回“x=?”,其中?代表解的数值,题目保证方程的解是整数。

示例1:

输入:

2x+5-3+x=6+x-2

输出:

x=1


示例2:

输入:

-2x=x-3x+7

输出:

No solution


示例3:

输入:

x+7=5+x+2

输出:

Infinite solutions


代码:

import java.util.Scanner;public class Equation {public static void main(String[] args) {Scanner in = new Scanner(System.in);String ss = in.nextLine();String[] s = ss.split("=");//将等式两边的分开处理int a=0;//代表累积常数int b=0;//代表累积系数//等式左边a += f(s[0])[0];b += f(s[0])[1];//等式右边a -= f(s[1])[0];b -= f(s[1])[1];if(a==0)System.out.println("Infinite solutions");else if(b==0){System.out.println("No Solution!");}else{System.out.println(-a/b);//注意打印时候的符号}}public static int[] f(String s){int[] t= new int[2];//t[0]存常数,t[1]存x前面的系数int e=0,f=0;//f取符号,e取当前读到的数字if(s.substring(0, 1).equals("-"))//先判断第一位是整数还是负数f=-1;elsef=1;int bb=0;//bb用于存放一个数for(int i=0;i<s.length();i++){String c=s.substring(i, i+1);//c取当前字符(注意是字符串的形式if(c.equals("+") ){t[0] += f*bb;//读到“+”时,说明当前读到的是一个常数,存入常数数组f=1;//读取到“+”时,将符号置为1,代表加一个正数bb=0;//存完一个数之后,记得将该变量置为0,以便存储后续的数}else if(c.equals("-") ){t[0] +=f*bb;f=-1;//读取到“+”时,将符号置为-1,代表加一个负数bb=0;}else if(c.equals("x")){if(bb==0)bb=1;t[1] += f*bb;bb=0;}else{e = Integer.valueOf(c);bb = bb*10+e*f;f=1;if(i==s.length()-1)//当读取到最后一位不是x且还未结束时,说明当前是一个常数,累积加到常数中t[0] += f*bb;}}return t;}}





原创粉丝点击