给定一个多项式,例如,5x^4 - 1x^2 +2x^2 -3 +5x
我创建了以下三个数组,其索引与每个"项目"的变量,度和系数匹配。在多项式中有。
coefficentArray=[5, -3, 2, -1, 5]
variableArray = [x, , x, x, x]
degreeArray = [1, 1, 2, 2, 4] //sorted on
我正在尝试编写将所有"项目加起来的代码"具有相同的度和相同的变量,并返回新多项式的字符串,因此例如我在这里寻找的将是+5x^4 +1x^2 +5x^1 -3x^0
。到目前为止,这是我的功能......
public static String putItTogether(int[] array,int[] array1, String[] array2, int count)
{
int j = count; //count is number of items in arrays
StringBuilder builder = new StringBuilder();
for (int i=count; i<=0 ; i--) {
int answer = 0;
while (array[j] == array[j-1]) { //array = degrees //array1 = coefficients // array2 = variable
if (array2[j] == array2[j-1]) { //if they both have x in same index
answer = array1[j] + array1[j-1];//add the coefficients
}
j--;
}
String coefficientString = Integer.toString(answer); //create string from answer
String degreeString = Integer.toString(array[j]); //get the degree and turn it into a String
if (answer < 0)
builder.append("-") //if answer negative, add negative sign
else
builder.append("+") // else add positive sign
builder.append(coefficientString); //add coefficient to builder
builder.append("x"); //add "x" to coefficient in builder
builder.append("^"); //add the "^" after the "x"
builder.append(degreeString); //finally add the degree after the "^"
buider.append(" "); //add space inbetween
}
}
return builder.toString();
}
使用顶部给出的多项式作为输入,我接收+0x^0 +0x^0
。现在盯着它看了几个小时似乎找不到任何东西,所以我想&#39 ; d尝试另外一双眼睛。感谢您的时间,我们非常感激。另外,如果你认为我应该杀了我的小宝贝&#34;代码宝贝&#34;并从不同角度处理问题,不要害怕告诉我!
答案 0 :(得分:2)
我建议你杀死目前的计划。执行reduce逻辑然后在一个循环中输出all可能非常混乱。相反,您应该在一个方法中执行reduce逻辑,然后使用另一个方法来打印reduce逻辑的结果。
现在对于该方法,度量列表和系数列表对于输入是很好的,我们将保留这些,但如果您的唯一变量是x
,则不需要变量列表。我明白为什么你有变量数组(对于常量)但是记住常量C = C * x^0
(一个常数的度数为零x^0=1
)所以基本上每个项中的每个项都有一个变量{{1 }}
现在,对于减少等式的第一部分,我建议使用一个映射,其中键是变量的程度,值是系数值。这将用于跟踪每个学位的系数值。
注意,等式x
的地图看起来像
3x^2 + 2x + 3
(degree --> coefficient
)
coefficient x^degree
(2 --> 3
)
3 x^2
(1 --> 2
)
2 x^1
(0 --> 3
)
所以reduce算法看起来像这样。 。
3 x^0
程序的输出是系数图的程度。然后,您可以使用该地图构建方程式字符串。我们会将每个条目public TreeMap<Integer,Integer> reducePolynomial(int[] coefficients, int[] degrees) {
TreeMap<Integer,Integer> polynomials = new TreeMap<Integer,Integer>();
for(int i = 0; i < coefficients.length; i++) {
int coefficient = coefficients[i];
int degree = degrees[i];
if(polynomials.containsKey(degree)) {
// sum coefficients of the same degree
int currentCoefficient = polynomials.get(degree);
polynomials.put(degree, currentCoefficient + coefficient);
} else {
// no coefficient for the current degree, add it to map
polynomials.put(degree, coefficient);
}
}
return polynomials;
}
转为degree --> coefficient
+-coefficient x^degree
所有这一切背后的想法是将输入列表减少为一个方便的数据结构,然后使用该数据结构输出结果。
最后,如果你想扩展这个算法以使用多个变量(public String outputPolynomial(TreeMap<Integer,Integer> polynomials) {
StringBuilder builder = new StringBuilder();
for(Entry<Integer,Integer> polynomial : polynomials.descendingMap().entrySet()) {
if(polynomial.getValue() != 0) {
// append plus (note negative coefficient will print out a minus sign)
if(polynomial.getValue() >= 0) {
builder.append("+ ");
}
// append coefficient
builder.append(polynomial.getValue());
builder.append("x^");
// append degree
builder.append(polynomial.getKey());
builder.append(" ");
}
}
return builder.toString();
}
,y
,...)那么你可以构建多个映射,每个变量一个,加上一个变量来保持跟踪常数值。
编辑:发表评论
z
来自哪里?
这是我写的一个错误。我修改了代码,这样如果多项式系数= 0,则不输出当前多项式。
如何按降序顺序输出?
我实现了HashMaps,它没有订单但TreeMaps却没有。您可以制作+ 0x^0
,然后就可以执行类似
new TreeMap<Integer,Integer>();
我修改了上面的代码,改为使用TreeMap。