赞
踩
表:Terms
Column Name | Type |
---|---|
power | int |
factor | int |
你有一个非常强大的程序,可以解决世界上任何单变量的方程。传递给程序的方程必须格式化如下:
1、左边 (LHS) 应该包含所有的术语。
2、右边 (RHS) 应该是零。
3、LHS 的每一项应遵循 “X^” 的格式,其中:
是 “+” 或者 “-”。
是 factor 的 绝对值。
是 power 的值。
如果幂是 1, 不要加上 “^”.
例如, 如果 power = 1 并且 factor = 3, 将有 “+3X”。
如果幂是 0, 不要加上 “X” 和 “^”.
例如, 如果 power = 0 并且 factor = -3, 将有 “-3”。
4、LHS 中的幂应该按 降序排序。
编写一个解决方案来构建方程。
输入:
Terms 表:
power | factor |
---|---|
2 | 1 |
1 | -4 |
0 | 2 |
输出:
equation |
---|
+1X^4-4X+2=0 |
输入:
Terms 表:
power | factor |
---|---|
4 | -4 |
2 | 1 |
1 | -1 |
输出:
equation |
---|
-4X^4+1X^2-1X=0 |
with tmp as (
select power,
concat(
IF(factor < 0, factor, concat('+', factor)),
IF(power = 0, '', 'X'),
IF(power < 2, '', concat('^', power))
) AS value
from Terms
)
select concat(group_concat(value order by power desc separator ''), '=0') AS equation
from tmp
第一步,根据要求列出对应的式子进行输出,power 是为了之后拼接使用
select power,
concat(
IF(factor < 0, factor, concat('+', factor)),
IF(power = 0, '', 'X'),
IF(power < 2, '', concat('^', power))
) AS value
from Terms
| power | value |
| ----- | ----- |
| 2 | +1X^2 |
| 1 | -4X |
| 0 | +2 |
第二步,使用 group_concat 进行拼接,拼接字符使用空字符串就行,记住得根据 power 倒序进行拼接
select concat(group_concat(value order by power desc separator ''), '=0') AS equation
from (
select power,
concat(
IF(factor < 0, factor, concat('+', factor)),
IF(power = 0, '', 'X'),
IF(power < 2, '', concat('^', power))
) AS value
from Terms
) AS one
假设模拟数据
power | factor |
---|---|
67 | 12 |
82 | 54 |
第一步,不根据 power 排序(例子里面是顺序,也可能乱序)和根据 power 倒序两种情况,都不输出 power
select concat(
IF(factor < 0, factor, concat('+', factor)),
IF(power = 0, '', 'X'),
IF(power < 2, '', concat('^', power))
) AS value
from Terms
| value |
| ------- |
| +12X^67 |
| +54X^82 |
select concat(
IF(factor < 0, factor, concat('+', factor)),
IF(power = 0, '', 'X'),
IF(power < 2, '', concat('^', power))
) AS value
from Terms
order by power desc
| value |
| ------- |
| +54X^82 |
| +12X^67 |
第二步,正常去使用 group_concat 进行拼接(对应第一步两种情况)
select concat(group_concat(value separator ''), '=0') AS equation
from (
select concat(
IF(factor < 0, factor, concat('+', factor)),
IF(power = 0, '', 'X'),
IF(power < 2, '', concat('^', power))
) AS value
from Terms
) AS one
| equation |
| ---------------- |
| +12X^67+54X^82=0 |
select concat(group_concat(value separator ''), '=0') AS equation
from (
select concat(
IF(factor < 0, factor, concat('+', factor)),
IF(power = 0, '', 'X'),
IF(power < 2, '', concat('^', power))
) AS value
from Terms
order by power desc
) AS one
| equation |
| ---------------- |
| +12X^67+54X^82=0 |
我们如果改成输出 power,在 group_concat 函数里进行排序
select concat(group_concat(value order by power desc separator ''), '=0') AS equation
from (
select power,
concat(
IF(factor < 0, factor, concat('+', factor)),
IF(power = 0, '', 'X'),
IF(power < 2, '', concat('^', power))
) AS value
from Terms
)
| equation |
| ---------------- |
| +54X^82+12X^67=0 |
从结果来看,我们很容易发现一个点,在使用 group_concat 之前提前使用排序是没有效果的,需要在 group_concat 函数中进行使用,这个需要特别注意。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。