命题:有A,B,C,D四个数,A只能取值0或1,B只能取值0或2,C只能取值0或3,D只能取值0或4,
并且A,B,C,D这四个数某一时刻肯定有也只能有一个数是非零,其他三个数肯定是零。
求随机情况某时间点下z=A+B+C+D的和。
定义变量的步骤就省略了,
如果用LUA语言的话很简单:
if A>0 then
z=1
elseif b>0 then
z=2
elseif c>0 then
z=3
elseif d>0 then
z=4
end如果用delphi
我只能用连续套用 if then else
if A>0 then
z:=1
else
if B>0 then
z:=2
else
if C>0 then
z:=3
else
z:=4;
幸好只有4个数,要是有几十个数,那不就很麻烦而且格式很难看,要是用case语句,我不会写,或者case语句根本解决不了这样多个不同变量取不同值情况
有哪位高手能用delphi语句很好解决这个问题吗,谢谢!
并且A,B,C,D这四个数某一时刻肯定有也只能有一个数是非零,其他三个数肯定是零。
求随机情况某时间点下z=A+B+C+D的和。
定义变量的步骤就省略了,
如果用LUA语言的话很简单:
if A>0 then
z=1
elseif b>0 then
z=2
elseif c>0 then
z=3
elseif d>0 then
z=4
end如果用delphi
我只能用连续套用 if then else
if A>0 then
z:=1
else
if B>0 then
z:=2
else
if C>0 then
z:=3
else
z:=4;
幸好只有4个数,要是有几十个数,那不就很麻烦而且格式很难看,要是用case语句,我不会写,或者case语句根本解决不了这样多个不同变量取不同值情况
有哪位高手能用delphi语句很好解决这个问题吗,谢谢!
if a > 0 then
begin
Z := A;
Exit;
end;
if b > 0 then
begin
Z := b;
Exit;
end;
if c > 0 then
begin
Z := c;
Exit;
end;
if d > 0 then
begin
Z := d;
Exit;
end;
然后再像我那样写 把Z改成Result
因为你这四个数都是自己定义的变量 没有数据来源,所以没有更好的办法
这是个O(N)算法
或者有
case A>0 --------
case B>0 --------
case C>0 --------
等等多个条件选择的语句?
这样的语句使得程序体简单易读。否则要是用一群if语句嵌套,看得眼都花了,而且自己写码时麻烦又容易错。
if A>0 then
result:=1
else if b>0 then
result:=2
else if c>0 then
result:=3
else if d>0 then
result:=4
;
而且这种写法可以不用逐层缩进的,因为这是同时只有一项为真
相当于一种扩展的case(case的每项都是确定值,本例是大于)
太棒了,要的就是这个效果,简单易读!
但是不知道这是不是也还是if语句嵌套使用,我听中山大学黎培兴老师的录像里面讲if语句一般不要超过5层嵌套,我经常要用到十几个条件选择的,不知道这样用会不会影响程序效率,我很菜的,谢谢指教了。
但是它不是层次嵌套,而是逐个选择,相当于是case语法的分解(但是灵活了)
层次嵌套是:
if a>0 then
if b>0 then
if c>0 then
...
else // c<=0
...
else
if c>0 then
...
else // c<=0
...
else
if b>0 then
if c>0 then
...
else // c<=0
...
else
if c>0 then
...
else // c<=0
...
;