一个表达式中包括变量、常量、操作符、圆括号,圆括号可以嵌套, 编写程序判断表达式中的括号是否正确匹配
#include<iostream>#include<string>usingnamespacestd;structNode{chardata;Node*next;};c...
#include <iostream>
#include <string>
using namespace std;
struct Node
{
char data;
Node *next;
};
class LinkStack
{
public:
LinkStack()
{
top=NULL;
}
~LinkStack();
void Push(char x);
void Pop();
bool Empty();
private:
Node *top;
};
LinkStack::~LinkStack()
{
Node *p;
while (top)
{
p=top->next;
delete p;
top = p;
}
}
void LinkStack::Push(char x)
{
Node *s;
s = new Node;
s->data = x;
s->next = top;
top = s;
}
void LinkStack::Pop()
{
Node *p;
if (top==NULL)
{
throw"下溢";
}
p = top;
top = top->next;
delete p;
}
bool LinkStack::Empty()
{
if (top == NULL)
{
return true;
}
else
{
return false;
}
}
int main()
{
LinkStack s;
char a[50];
int i=0;
while (cin >> a)
{
for (i=0; i<strlen(a); i++)
{
if (a[i]=='(')
{
s.Push(a[i]);
}
else if (a[i]==')')
{
if (s.Empty())
{
cout << "No" << endl;
break;
}
else
{
s.Pop();
}
}
}
if (!s.Empty())
{
cout << "No" << endl;
}
if(s.Empty())
{
cout << "Ok" << endl;
}
}
return 0;
}
为什么测试数据为:((a+b)*6)+(c-d)/8)))*e时 输出为两行
NO
ok
标准输出应该为:No
更屌的是,我提交后,正确率100%····
但是我还是想完美一点儿~求高人指点!!! 展开
#include <string>
using namespace std;
struct Node
{
char data;
Node *next;
};
class LinkStack
{
public:
LinkStack()
{
top=NULL;
}
~LinkStack();
void Push(char x);
void Pop();
bool Empty();
private:
Node *top;
};
LinkStack::~LinkStack()
{
Node *p;
while (top)
{
p=top->next;
delete p;
top = p;
}
}
void LinkStack::Push(char x)
{
Node *s;
s = new Node;
s->data = x;
s->next = top;
top = s;
}
void LinkStack::Pop()
{
Node *p;
if (top==NULL)
{
throw"下溢";
}
p = top;
top = top->next;
delete p;
}
bool LinkStack::Empty()
{
if (top == NULL)
{
return true;
}
else
{
return false;
}
}
int main()
{
LinkStack s;
char a[50];
int i=0;
while (cin >> a)
{
for (i=0; i<strlen(a); i++)
{
if (a[i]=='(')
{
s.Push(a[i]);
}
else if (a[i]==')')
{
if (s.Empty())
{
cout << "No" << endl;
break;
}
else
{
s.Pop();
}
}
}
if (!s.Empty())
{
cout << "No" << endl;
}
if(s.Empty())
{
cout << "Ok" << endl;
}
}
return 0;
}
为什么测试数据为:((a+b)*6)+(c-d)/8)))*e时 输出为两行
NO
ok
标准输出应该为:No
更屌的是,我提交后,正确率100%····
但是我还是想完美一点儿~求高人指点!!! 展开
1个回答
展开全部
表达式技术
在 3ds max 中,您可以使用数学表达式(而不是常数)来表达参数值。 例如,您可以使用表达式 24*6 来表示数字 144。
可以使用数学表达式来控制下列对象属性:
对象参数,如长度、宽度和高度
变换和修改器值,如对象的位置坐标
关联参数、表达式控制器和数值表达式求值器都使用本主题中介绍的表达式。
表达式是一种能得出数值的数学函数。 可以使用表达式来控制下列场景元素:
场景元素 可计算属性
创建参数 任意数字创建参数
变换 位置 [X、Y、Z]
X 轴旋转
Y 轴旋转
Z 轴旋转
缩放 [X%、Y%、Z%]
修改器 任意数字修改器参数(包括创建参数)
材质 颜色 [R、G、B]
任意数字材质参数
注意: 表达式只处理 Euler 旋转的单个 XYZ 分量。 不能将表达式指定给 TCB 旋转或其他类型的旋转控制器。
注意: 以下链接指向本主题中包含的章节。
表达式结果类型
操作符
变量
函数
请参见
三角函数
向量
表达式控制器技术
表达式结果类型
表达式得出的值的类型取决于控制器的种类:
浮点表达式得出浮点标量值(例如,5.617)。 标量在数字参数的动画控制器中使用。
如果参数具有整数值,则表达式会将浮点值舍入为最接近的整数。
位置、缩放和 Point3 表达式得出三元向量。 例如,[5,18,24]。 向量可以表示对象的 X,Y,Z 位置、X,Y,Z 百分比缩放或材质中的颜色(RGB 值)。
操作符
在下表中,p 和 q 代表任意标量值或表达式,V 和 W 代表任意向量值或表达式。 (字符“x”用作向量交叉乘积运算符。)
标量运算符
以下是用于标量值的算术运算符:
操作符 使用 含义
+ p+q 其他
- p-q 相减
- -p 加性逆元
* p*q 乘法
/ p/q 部门
^ p^q 幂(p 的 q 次幂)
** p**q ^ 和 ** 的运算方法相同
也可以将逻辑(布尔)运算符用于标量值。 如果为真,这些运算符都得出 1,否则得出 0:
操作符 使用 含义
= p=q 等于
< p<q 小于
> p>q 大于
<= p<=q 小于或等于
>= p>=q 大于或等于
| p|q 逻辑或,如果 p 或 q 不为零,则得出 1;否则得出 0。
& p&q 逻辑和,如果 p 和 q 都不为零,则得出 1;否则得出 0。
提示: 逻辑运算符在“条件”函数中很有用。
向量运算符
对于具有变量名称的向量,可以使用特殊分量运算符 (.) 来指代向量的三个标量分量:
使用 含义
V.x 第一个分量 (X)
V.y 第二个分量 (Y)
V.z 第三个分量 (Z)
以下是用于向量算术的运算符:
操作符 使用 含义
+ V+W 其他
- V-W 相减
* p*V 标量相乘
* V*p 标量相乘
* V*W 点积
X VxW 叉积
/ V/p 标量相除
运算符优先级
表达式的优先级有八个级别。 在列表中位置越高的运算符,越先进行求值。
操作符 优先级
- + 作为一元运算符,如 -8,+25
. 分量运算符,如 V.x
** ^
X 叉积
* /
+ -
= < > <= >=
| &
圆括号属于特殊情况。 它们是分组或次表达式运算符,因此您可以忽略其他运算符的优先级顺序。
变量
在为表达式控制器编写的表达式中,用符号名称表示变量。 可以创建符号名称,以在表达式中包含常量或变量值。 同时还提供了若干个预定义的变量。 其中一些变量具有常量值,其他变量则可以改变。
在用于参数关联和数值表达式求值器的表达式中,您可以将预定义的变量与常数值一起使用。
具有常量值的预定义变量
以下为具有常量值的预定义变量(变量名称区分大小写):
变量名称 常量值 使用
pi 3.14159 圆周长与直径的比。
e 2.71828 自然对数的底。
TPS 4800 每秒刻度;3ds max3ds max 动画的基本时间单位。
具有变量值的预定义变量
以下为具有可变的、基于时间的值的预定义变量(变量名称区分大小写):
变量名称 含义
F 帧编号。 对于每一帧,F 等于当前帧编号,从 0 开始计算。 根据活动时间段中帧编号的不同,帧的范围会有所变化。
NT 规格化时间。 根据定义,规格化时间 (NT) 在活动时间段中的范围为从 0 到 1,无论该段中有多少帧。 如果表达式基于 NT,则其效果在范围内只产生一次。 也可以将 NT 乘以一个因子,以便表达式的效果可以产生一定次数(例如,2*NT 会使表达式的效果产生两次)。 如果更改时间段的长度,则基于 NT 的表达式会加速或减速运行。
S 秒数(以秒为单位的已用时间)。 已用时间从第一帧开始到当前帧结束来计量。 根据活动时间段总时间的不同,秒数范围会有所变化。
T 刻度(以刻度为单位的已用时间)。 每秒有 4800 个刻度。 已用时间从第一帧开始到当前帧结束来计量。 根据活动时间段总时间的不同,刻度范围会有所变化。
变量命名规则
变量名称可以包含任意多的字母数字字符。 其长度不受限制。
变量名称不能包含空格。
变量名称必须以字母开头。 数字在变量名称中有效(如“Pos1”或“M23”)。
变量名称区分大小写。 例如,“pos”、“Pos”和“POS”指定三个不同的变量。
不能创建与另一个变量同名(包括预定义的变量名称)的变量。
函数
以下列出的函数可用于表达式。 在该列表中,p、q 和 r 代表标量值或标量表达式。 V 和 W 代表向量值或向量表达式。
要在表达式中使用函数,请输入函数名称和适当的参数。
三角函数
正弦、余弦和正切函数采取以度为单位的角度,并得出浮点值。 反三角函数采取浮点值,并得出以度为单位的值。
功能 含义
sin(p) 正弦
cos(p) 余弦
tan(p) 正切
asin(p) 反正弦
acos(p) 反余弦
atan(p) 反正切
双曲线函数
双曲线函数采取浮点值,并得出浮点值。
功能 含义
sinh(p) 双曲正弦
cosh(p) 双曲余弦
tanh(p) 双曲正切
在弧度值与度数值之间转化
功能 含义
radToDeg(p) 采取以弧度为单位的 p,并得出以度为单位的相同角度
degToRad(p) 采取以度为单位的 p,并得出以弧度为单位的相同角度
舍入函数
功能 含义
ceil(p) 大于或等于 p 的最小整数
floor(p) 小于或等于 p 的最大整数
标准计算
功能 含义
ln(p) 以 e 为底的自然对数
log(p) 以 10 为底的常用对数
exp(p) 指数函数 exp(p)=e^p
pow(p,q) p 的 q 次幂 (p^q)
sqrt(p) 平方根
abs(p) 绝对值
min(p,q) 最小值得出 p 或 q,这取决于哪一个更小
max(p,q) 最大值得出 p 或 q,这取决于哪一个更大
mod(p,q) p 除以 q 后的余数
条件函数
功能 含义
if(p,q,r) 与常用的电子表格“if”工作原理相同(如果 p 为非零,则“if”得出 q,否则得出 r。)
vif(c,V1,V2) “Vector If”(如果 c 为真,则值为 V1,否则为 V2。)
向量处理函数
功能 含义
length(V) V 的长度
comp(V,i) 第 i 个分量 (I=0,1,2): comp([5,6,7],1)=6
unit(V) 得出与 V 方向相同的单位向量
注意: 分量函数是 V.x、V.y 和 V.z 表示法的另一种选择。
特殊动画函数
功能 含义
noise(p,q,r) 3D 噪波: 得出随机生成的位置
任意值 p、q 和 r 用作随机生成种子。 您可以重新使用这些值,以确保 noise() 得出相同的值。
请参考
在 3ds max 中,您可以使用数学表达式(而不是常数)来表达参数值。 例如,您可以使用表达式 24*6 来表示数字 144。
可以使用数学表达式来控制下列对象属性:
对象参数,如长度、宽度和高度
变换和修改器值,如对象的位置坐标
关联参数、表达式控制器和数值表达式求值器都使用本主题中介绍的表达式。
表达式是一种能得出数值的数学函数。 可以使用表达式来控制下列场景元素:
场景元素 可计算属性
创建参数 任意数字创建参数
变换 位置 [X、Y、Z]
X 轴旋转
Y 轴旋转
Z 轴旋转
缩放 [X%、Y%、Z%]
修改器 任意数字修改器参数(包括创建参数)
材质 颜色 [R、G、B]
任意数字材质参数
注意: 表达式只处理 Euler 旋转的单个 XYZ 分量。 不能将表达式指定给 TCB 旋转或其他类型的旋转控制器。
注意: 以下链接指向本主题中包含的章节。
表达式结果类型
操作符
变量
函数
请参见
三角函数
向量
表达式控制器技术
表达式结果类型
表达式得出的值的类型取决于控制器的种类:
浮点表达式得出浮点标量值(例如,5.617)。 标量在数字参数的动画控制器中使用。
如果参数具有整数值,则表达式会将浮点值舍入为最接近的整数。
位置、缩放和 Point3 表达式得出三元向量。 例如,[5,18,24]。 向量可以表示对象的 X,Y,Z 位置、X,Y,Z 百分比缩放或材质中的颜色(RGB 值)。
操作符
在下表中,p 和 q 代表任意标量值或表达式,V 和 W 代表任意向量值或表达式。 (字符“x”用作向量交叉乘积运算符。)
标量运算符
以下是用于标量值的算术运算符:
操作符 使用 含义
+ p+q 其他
- p-q 相减
- -p 加性逆元
* p*q 乘法
/ p/q 部门
^ p^q 幂(p 的 q 次幂)
** p**q ^ 和 ** 的运算方法相同
也可以将逻辑(布尔)运算符用于标量值。 如果为真,这些运算符都得出 1,否则得出 0:
操作符 使用 含义
= p=q 等于
< p<q 小于
> p>q 大于
<= p<=q 小于或等于
>= p>=q 大于或等于
| p|q 逻辑或,如果 p 或 q 不为零,则得出 1;否则得出 0。
& p&q 逻辑和,如果 p 和 q 都不为零,则得出 1;否则得出 0。
提示: 逻辑运算符在“条件”函数中很有用。
向量运算符
对于具有变量名称的向量,可以使用特殊分量运算符 (.) 来指代向量的三个标量分量:
使用 含义
V.x 第一个分量 (X)
V.y 第二个分量 (Y)
V.z 第三个分量 (Z)
以下是用于向量算术的运算符:
操作符 使用 含义
+ V+W 其他
- V-W 相减
* p*V 标量相乘
* V*p 标量相乘
* V*W 点积
X VxW 叉积
/ V/p 标量相除
运算符优先级
表达式的优先级有八个级别。 在列表中位置越高的运算符,越先进行求值。
操作符 优先级
- + 作为一元运算符,如 -8,+25
. 分量运算符,如 V.x
** ^
X 叉积
* /
+ -
= < > <= >=
| &
圆括号属于特殊情况。 它们是分组或次表达式运算符,因此您可以忽略其他运算符的优先级顺序。
变量
在为表达式控制器编写的表达式中,用符号名称表示变量。 可以创建符号名称,以在表达式中包含常量或变量值。 同时还提供了若干个预定义的变量。 其中一些变量具有常量值,其他变量则可以改变。
在用于参数关联和数值表达式求值器的表达式中,您可以将预定义的变量与常数值一起使用。
具有常量值的预定义变量
以下为具有常量值的预定义变量(变量名称区分大小写):
变量名称 常量值 使用
pi 3.14159 圆周长与直径的比。
e 2.71828 自然对数的底。
TPS 4800 每秒刻度;3ds max3ds max 动画的基本时间单位。
具有变量值的预定义变量
以下为具有可变的、基于时间的值的预定义变量(变量名称区分大小写):
变量名称 含义
F 帧编号。 对于每一帧,F 等于当前帧编号,从 0 开始计算。 根据活动时间段中帧编号的不同,帧的范围会有所变化。
NT 规格化时间。 根据定义,规格化时间 (NT) 在活动时间段中的范围为从 0 到 1,无论该段中有多少帧。 如果表达式基于 NT,则其效果在范围内只产生一次。 也可以将 NT 乘以一个因子,以便表达式的效果可以产生一定次数(例如,2*NT 会使表达式的效果产生两次)。 如果更改时间段的长度,则基于 NT 的表达式会加速或减速运行。
S 秒数(以秒为单位的已用时间)。 已用时间从第一帧开始到当前帧结束来计量。 根据活动时间段总时间的不同,秒数范围会有所变化。
T 刻度(以刻度为单位的已用时间)。 每秒有 4800 个刻度。 已用时间从第一帧开始到当前帧结束来计量。 根据活动时间段总时间的不同,刻度范围会有所变化。
变量命名规则
变量名称可以包含任意多的字母数字字符。 其长度不受限制。
变量名称不能包含空格。
变量名称必须以字母开头。 数字在变量名称中有效(如“Pos1”或“M23”)。
变量名称区分大小写。 例如,“pos”、“Pos”和“POS”指定三个不同的变量。
不能创建与另一个变量同名(包括预定义的变量名称)的变量。
函数
以下列出的函数可用于表达式。 在该列表中,p、q 和 r 代表标量值或标量表达式。 V 和 W 代表向量值或向量表达式。
要在表达式中使用函数,请输入函数名称和适当的参数。
三角函数
正弦、余弦和正切函数采取以度为单位的角度,并得出浮点值。 反三角函数采取浮点值,并得出以度为单位的值。
功能 含义
sin(p) 正弦
cos(p) 余弦
tan(p) 正切
asin(p) 反正弦
acos(p) 反余弦
atan(p) 反正切
双曲线函数
双曲线函数采取浮点值,并得出浮点值。
功能 含义
sinh(p) 双曲正弦
cosh(p) 双曲余弦
tanh(p) 双曲正切
在弧度值与度数值之间转化
功能 含义
radToDeg(p) 采取以弧度为单位的 p,并得出以度为单位的相同角度
degToRad(p) 采取以度为单位的 p,并得出以弧度为单位的相同角度
舍入函数
功能 含义
ceil(p) 大于或等于 p 的最小整数
floor(p) 小于或等于 p 的最大整数
标准计算
功能 含义
ln(p) 以 e 为底的自然对数
log(p) 以 10 为底的常用对数
exp(p) 指数函数 exp(p)=e^p
pow(p,q) p 的 q 次幂 (p^q)
sqrt(p) 平方根
abs(p) 绝对值
min(p,q) 最小值得出 p 或 q,这取决于哪一个更小
max(p,q) 最大值得出 p 或 q,这取决于哪一个更大
mod(p,q) p 除以 q 后的余数
条件函数
功能 含义
if(p,q,r) 与常用的电子表格“if”工作原理相同(如果 p 为非零,则“if”得出 q,否则得出 r。)
vif(c,V1,V2) “Vector If”(如果 c 为真,则值为 V1,否则为 V2。)
向量处理函数
功能 含义
length(V) V 的长度
comp(V,i) 第 i 个分量 (I=0,1,2): comp([5,6,7],1)=6
unit(V) 得出与 V 方向相同的单位向量
注意: 分量函数是 V.x、V.y 和 V.z 表示法的另一种选择。
特殊动画函数
功能 含义
noise(p,q,r) 3D 噪波: 得出随机生成的位置
任意值 p、q 和 r 用作随机生成种子。 您可以重新使用这些值,以确保 noise() 得出相同的值。
请参考
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询