讨论 / 求七夕题目里的多项式化简的思路,,我想破头也想不出来
junxu123 2010-08-17 18:40:00
点我顶贴 收藏 删除
写出来都是漏七漏八的

不能完整 ,,,

符号太多了看了都头晕

有一个大牛AC了

可以谈谈思路吗

#1 zaq1xsw2tktk@2010-08-16 09:21:00
回复 删除
不太会写啊 见谅

大概说一下 括号直接递归调用解决

一下假设没有括号

用v0,v1,v2,..,vn存放符号之间的单项式

用f0,f1,f2,...,fn-1存放符号

令pi=i+1;

这样符号fi 其实就是与v[pi]进行运算

如a+b*a^4

v0=a v1=b v2=a v3=4

f0=+ f1=* f2=^

p0=1 p1=2 p2=3 p3=-1

第一次计算乘方 及计算当fi=^ 时 vi 与 v[pi] 在符号 fi 的运算下的值 复制到 vi

在令 pi=p[pi] 及删除下一个节点

这样遍历3次

大概相当于链表

没用高精度 70。。

#2 y63308042@2010-08-17 02:09:00
回复 删除
不知道够不够严密,发个伪代码吧..

//昨天我考虑的是没排除+-*/的算法,所以能兼容-和/

//不过貌似题目没要求..当+-共存时要从右往左扫描滴

type 高精度类型

二维高精度数组类型

//有效符号指存在于括号外的符号

function calc (式子:string):二维高精度数组

{

if 没有运算符 then exit( 转换( 式子 -> 数组 ) )

if 式子两端有一对括号(相对应的,一左一右) then 删除两端括号

if pos('+''-') then

if 存在有效+-号 then

{

tmp=右边第一个有效+-号

exit( 矩阵加减( calc(左串) , calc(右串) ) )

}

if pos('*''/') then

if 存在有效*/号 then

{

tmp=右边第一个有效*/号

exit( 矩阵乘除( calc(左串) , calc(右串) ) )

}

if pos('^') then

if 存在有效^号 then

{

tmp=右边第一个有效^号

exit( 矩阵乘方( calc(左串) , calc(右串) ) )

}

}

#3 leapoahead@2010-08-17 18:40:00
回复 删除
ls thanks 收藏思路了
查看更多回复
提交回复