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

本文介绍了一种解析一元一次方程的方法,并通过示例展示了如何判断方程是否有唯一解、无解或有无限解的情况。代码实现部分详细解释了如何通过累积系数和常数项来求解方程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给出一个没有简化的一元一次方程的解,如果方程没有解,返回“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;
		else
			f=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;
	}
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值