早两天,有一个朋友要我帮忙做一个一元一次方程的程序,要求如下:
时限:1秒
内存:32M
比如:
2x-4+5x+300=98x
每一个方程的一般形式是这样的:
'='两边分别为以x为变量的表达式
每个表达式都是由'+'或'-'号的项组成
表达式中不会出现一元的'+'或'-'
每一个项,或都是一个单独的整数,或都是由一个整数和一个小写的字符x或由一个小写的字符x组成,这里,一个小写的字符x表示为1x
请你写一个程序求得x的值。要注意的是,给出的方程可以没有解或都有无穷解。
数据输入
输入数据包括多组测试数据,请处理到EOF结束。
每组输入数据为一行长度小于260个字符的字符串,表示给出的一元一次方程。字符串里没有多余的空格,并且变量都为小写字符x。x的系数为一个整数,整数的范围为[0,1000]。
数据输出
数据输出为给出的方程的解。
如果S是原方程的解,请输出S的向下取整后的整数(即小于或等于s的最大的整数)。
如果原方程没有解,请输出"IMPOSSIBLE"。
如果原方程有无穷多解,请输出"IDENTITY"。
样例输入
2x-4+5x+300=98x
x+2=2+x
样例输出
3
IDENTITY
我的思路大概是这样的,最后是要把一元一次方程变成这样的形式:[coef]x=[cons],其中coef为x前的系数,cons为常数,这样再用cons/coef就可以得出方程的解。所以问题就是合并x前的系数,常数。
程序如下:
package org.fsj.lib;
import java.util.List;
import java.util.ArrayList;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
/**
* Author: fsj
* Date: 2008-5-12
* Time: 1:29:46
*/
public class Equation {
//输入的方程列表
private List equationList = new ArrayList();
public void input() {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
try {
while ((str = br.readLine()) != null) {
equationList.add(str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void compute() {
for (String equation : equationList) {
computeEquation(equation);
}
}
public void computeEquation(String equation) {
int coefficient = 0; //系数
int constant = 0; //常数
int coefficientSymbol = 1; //系数的符号,=号左边为正
int constantSymbol = -1; //常数的符号号,=号左边为负
int item = 0; //方程的数字项
int symbol = 1; //系数和常数前的正负号
int i = 0;
boolean zero = true;
char ch;
char[] charItem = new char[260];
for (int index = 0; index < equation.length(); index++) {
ch = equation.charAt(index);
item = 0;
//循环取出数字项
while (ch >= '0' && '9' >= ch) {
item = item * 10 + ch - '0';
if (item == 0) zero = false;
if (++index < equation.length()) {
ch = equation.charAt(index);
} else {
break;
}
}
charItem[i++] = ch;
if (i > 1) {
//取出系数或者是常数前的正负号
symbol = (charItem[i - 2] == '-' ? -1 : 1);
}
//如果是x,累加x前的系数到coefficient
if (ch == 'x') {
if (item == 0 && zero) item = 1;
coefficient = coefficient + item * coefficientSymbol * symbol;
} else {
//否则累加常数到constant
constant = constant + item * constantSymbol * symbol;
//如果当前的字符为=,系数前的符号变成负,常数前的符号变成正
if (ch == '=') {
coefficientSymbol = -1;
constantSymbol = 1;
}
}
}
//输出:系数不为0,输出解;否则系数为0,常数也为0,输出无穷解,否则输出无解
if (coefficient != 0) {
System.out.println((int) Math.floor((float) constant / coefficient));
} else {
if (constant == 0) {
System.out.println("IDENTITY");
} else {
System.out.println("IMPOSSIBLE");
}
}
}
public static void main(String[] args) {
Equation eq = new Equation();
eq.input();
eq.compute();
}
}
分享到:
相关推荐
本项目聚焦于利用微信小程序来实现一个解决一元二次方程的工具。 一元二次方程是数学中的基本概念,通常形式为ax² + bx + c = 0,其中a、b、c是常数,a≠0。求解一元二次方程的根,我们可以利用公式法,即: x = ...
1. 一元一次方程的定义:一元一次方程是指只有一个未知数的线性方程,例如2x + 3 = 5。 2. 一元一次方程的解决方法:一元一次方程的解决方法有多种,包括移项法、归并法、配方法等。例如,方程2x + 3 = 5可以通过...
总结来说,"一元二次方程_labview_"项目提供了一个LabVIEW实现的工具,用于计算和显示一元二次方程的解。用户只需输入方程的系数,即可得到准确的结果。这展示了LabVIEW在数学计算和教育应用中的灵活性和实用性。...
本文主要介绍了使用汇编语言设计一个程序,求解一元二次方程 ax2+bx+x=0。该程序可以从键盘输入a,b,c的值,并显示方程的解。考虑所有的情况,包括共轭复根。在设计过程中,需要进行方案比较和认证、系统原理阐述、...
总之,C# Windows窗体一元二次方程求解程序是一个结合了基础编程技能和数学知识的实例,它可以帮助开发者巩固C#语法,理解Windows Forms应用的工作原理,同时也能提高解决实际问题的能力。对于初学者来说,这是一个...
如果二次项系数为零,一次项系数不为零,那么方程是一次方程,有唯一解。如果二次项系数不为零,那么方程有两个实根或复根。在这种情况下,程序会根据判别式的值来判断方程的根的情况,如果判别式为零,那么方程有两...
在这个场景中,我们面临的问题是如何使用VC++(Visual C++)这个强大的C++集成开发环境来编写一个程序,以求解一元四次方程。一元四次方程指的是形如ax^4 + bx^3 + cx^2 + dx + e = 0的方程,其中a, b, c, d, e为...
1. 定义一个结构体或类来存储一元三次方程的系数,例如`struct QuadraticCoefficients { double a, b, c, d; }`。 2. 编写一个函数,如`double evaluateQuadratic(QuadraticCoefficients coeffs, double x)`,用于...
7. 错误处理:考虑到一元二次方程可能有零个、一个或两个实根,程序应能适当地处理这些情况。如果判别式 b² - 4ac ,则方程没有实根,应向用户展示相应提示。 在MFC应用中,使用C++面向对象编程可以提高代码的...
用Matlab实现一元二次方程求根,一个健壮的程序
本文将详细讲解如何利用Eclipse进行一元一次方程的求解,帮助初学者理解如何将数学知识与编程技能相结合。 一元一次方程是形如ax + b = 0的数学问题,其中a和b为已知常数,x为未知数,且a不等于0。在编程中,我们...
java写的简单的一元二次方程求解希望大家有兴趣的下了看看
在计算机编程领域,解决数学问题是一种常见的应用。本示例关注的是如何使用C++语言来求解一元三次方程的实数解。...这个程序的使用者只需更改输入的系数,就可以快速求得一元三次方程的实数解,极大地提高了计算效率。
计算一元二次方程的根涉及到数学上的求根公式,即根据判别式Δ=b²-4ac的值来判断方程有无实根、一个实根还是两个不同的实根。计算过程通常需要以下几个步骤: 1. 创建一个Java Bean类,用来封装一元二次方程的系数...
在本项目"QT5开发的一个一元一次方程计算器"中,开发者利用QT Creator和QT Designer这两款强大的工具,构建了一个简易的计算应用,特别适合初学者了解和学习QT的基本用法。 QT Creator是QT的集成开发环境(IDE),...
2、 编写一个一元二次方程类(Equation),具有类型为double的三个私有字段a, b, c分别代表方程的三个系数,通过构造方法给三个系数设置值,并用getFirstRoot()方法和getSecondRoot()方法得到两个实根。请另编写一个...
本项目旨在通过Java语言实现一个图形用户界面(GUI),用于解决一元二次方程问题。具体而言,用户可以在界面上输入一元二次方程的三个系数(a、b、c),系统会自动计算并显示出该方程的解。为了实现这一目标,项目...
本代码片段提供了一个简单的C++程序,用于求解一元二次方程,并直接输出结果。 首先,我们来看一下`#include<iostream.h>`和`#include<math.h>`这两条预处理指令。`iostream.h`是C++标准输入输出库,它允许我们使用...