问题描述
function max(a: array<int>,n:int):(int)
requires n>0
requires a.Length>n
reads a
{
if n==1 then a[0] else
if max(a,n-1)<a[n] then a[n] else
max(a,n-1)
}
method max_one_way(a: array<int>,n: int) returns (Result:int)
requires n>0
requires a.Length>n
ensures Result == max(a,n);
{
var i: int;
i := 1;
Result := a[0];
while (i < n)
invariant i <= n;
invariant Result == max(a,i);
{
i := i + 1;
if (Result < a[i])
{
Result := a[i];
}
}
}
method max_one_way_rule1(a: array<int>,n: int,i1: int,Result1 : int) returns (Result:int,i:int)
requires n > 0;
requires a.Length > n;
requires 0< i1 < n;
requires Result1 == max(a,i1);
requires Result1 < a[i1+1];
ensures i <= n;
ensures 0 < i < a.Length;
ensures Result == max(a,i);
{
i := i1+1;
Result := a[i];
}
method max_one_way_rule2(a: array<int>,i1);
requires Result1 > a[i1+1];
ensures i <= n;
ensures 0 < i < a.Length;
ensures Result == max(a,i);
{
i := i1+1;
Result:=Result1;
}
我尝试对max数组搜索进行编码,这是通过while循环进行的常规方式,例如max_one_way方法,但是我的想法是迭代调用满足条件的方法(max_one_way_rule1和rule2),对吗?提示,可以成功编译。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)