算法导论作业2.1

算法导论作业2.1

2.1-2

伪代码

for j=2 to A.length:
	key=A[j]
	i=j-1
	while j>0 and A[i]<key:
		A[i+1]=A[i]
		i=i-1
	A[i+1]=key

2.1-3

题中未提查找出所有与v相等的值,所以如下伪代码也合理

for i=1 to A.length
	if A[i]==v:
		print i
		break
print NIL

循环不变式:
初始:当i=1时,查找A[1]是否等于v,若等于v则终止
保持:当i=k时,由于k之前的都已经对比过了,所以接下来只用比较k和k之后的,若A[k]等于v,则终止;
终止:当找到v=A[i]时,终止,达到算法目的,i>A.length时还未找到v=A[i], 则v的值仍然为NIL,满足输出要求。

2.1-4

算法描述:
1、先将C数组全部置为0;
2、从数组A、B、C从最后一位向前位依次相加
3、若和为3则使C的当前位为1,上一位为1
若和为2则使C的当前位为1,上一位为0
若和为1则使C的当前位为1
若和为0则使C的当前位为0(即保持不变)

伪代码:

将C所有元素置0
for i=A.lenght to 0:
	s=i+1
	if A[i]+B[i]+C[s]==3
		c[s]=1
		c[s-1]=1
	else if A[i]+B[i]+C[s]==2
		c[s]=0
		c[s-1]=1
	else if A[i]+B[i]+C[s]==1
		c[s]=1
	else
		c[s]=0
	i=i-1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值