十五、嵌套循环

1. 嵌套循环中循环计数器不够的问题:

    1) 即多重循环就需要有多个循环计数器,并且每个计数器都是相互独立的,分别为各自的循环技术;

    2) 但是对于loop指令只提供了cx这一个计数器,这就产生了多个循环争用一个cx计数器的竞争问题了;

    3) 这个问题的解决方思路就是在进入一层循环的开始先将外面一层循环的计数器先保存起来,等到内存循环退出的时候在将外层循环的计数器重新恢复,因此这里如何保存计数器就有多种选择了;

    4) 可供的选择有:

        i. 可以将cx先保存在某个寄存器中:不好!因为寄存器资源非常有限,如果循环层数一多就会造成寄存器迅速枯竭,这样会导致资源浪费;

        ii. 将cx保存在普通的内存数据区:不好!如果循环层数一多,就会占用多个内存单元保存cx,这会增加程序的维护成本,必须记住每个备份的cx在内存中所在的位置,并且不能将它们的顺序搞错,这会加大程序出错的风险,同时增大程序员的压力;

        iii. 将cx保存在栈中:可取!这也是标准的做法,压栈和弹栈的顺序刚好符合循环嵌套的顺序,并且只需要push和pop操作,无需程序员自己维护栈中的区域;


2. 示例:将每行的单词变成大写:

assume cs:codesg, ds:datasg, ss:stacksg

datasg segment
	db 'ibm             '
	db 'dec             '
	db 'dos             '
	db 'vax             '
datasg ends

stacksg segment
	db 10 dup(0)
stacksg ends

codesg segment

start:
	mov		ax, datasg
	mov		ds, ax
	mov		ax, stacksg
	mov		ss, ax
	mov		sp, 10

	mov		al, 11011111B

	mov		bx, 0 ; row counter!
	mov		cx, 4
lp1:
	push	cx ; reserve cx!

	mov		si, 0 ; column counter!
	mov		cx, 3
	lp2:
		and		[bx][si], al	
		inc		si ; col++
		loop	lp2

	add		bx, 10H ; row++
	pop		cx ; recover cx!
	loop	lp1
codesg ends

end start
运行结果:



### 回答1: 这是一道线性方程组问题。 鸡有x只,兔有y只,由题目可得: x + y = 35 2x + 4y = 94 通过求解这个方程组,可得: x = 14, y = 21 所以,雉有14只,兔有21只。 可以使用嵌套循环来求解。 ### 回答2: 这是一道古代的数学经典题目,需要运用代数和数学思维解题。 设雉的数量为 x,兔的数量为 y,则: x + y = 35 (上有35头) 2x + 4y = 94 (下有94只脚) 对第一个式子进行变形,得: y = 35 - x 将 y 带入第二个式子,得: 2x + 4(35 - x) = 94 化简得: 2x + 140 - 4x = 94 -2x = -46 x = 23 将 x 带入 y = 35 - x,得: y = 12 因此,笼中共有23只雉和12只兔。 代码实现: h = int(input("请输入鸡兔总头数:")) f = int(input("请输入鸡兔总脚数:")) # 设雉的数量为 x,兔的数量为 y for x in range(1, h+1): y = h - x if 2*x + 4*y == f: print("雉的数量为:", x) print("兔的数量为:", y) break 建议使用嵌套循环的方式进行求解,这样可以枚举所有可能的情况,找到符合要求的答案。 ### 回答3: 这道题目是一道古代数学难题,需要用到代数方程的解法。假设雉的数量为 x,兔的数量为 y,根据题目的条件,我们可以得到以下两个方程: x + y = 35 (总头数) 2x + 4y = 94 (总脚数) 然后,我们通过代数的方法,解出 x 和 y 的值。首先,将第一个方程改写为 x = 35 - y,代入第二个方程中,得到: 2(35 - y) + 4y = 94 70 - 2y + 4y = 94 2y = 24 y = 12 再将 y 的值带入第一个方程,得到: x + 12 = 35 x = 23 因此,雉的数量为 23,兔的数量为 12。 对于代码实现,我们可以使用嵌套循环的方式,枚举每一种可能的组合,找出符合条件的组合。具体实现如下: h = int(input("请输入总头数:")) f = int(input("请输入总脚数:")) for x in range(h+1): y = h - x if 2*x + 4*y == f: print("雉的数量为:%d,兔的数量为:%d" % (x, y)) 以上代码中,我们首先读入总头数和总脚数,然后使用两个嵌套循环,枚举所有可能的组合。在每次循环中,我们计算出当前组合下雉和兔的数量,然后判断是否满足条件。如果满足条件,就输出答案。 总的来说,这道题目需要运用到代数方程的解法,同时也可以通过嵌套循环的方式解决。这道题目虽然是古代数学难题,但是我们通过现代计算机的力量,可以迅速解决它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值