1

程序随机化数字 1-53 而不重复。

无法使Check循环工作,但我知道这是问题所在,因为没有它它可以工作,但我需要它所以我不会重复,还有你如何按顺序对数字进行排序?

Include Irvine32.inc

.data   
   a dword 1
   b dword 53
   delta dword ?
   blank byte " ",0
   array dword 52 dup(0)
   lenarray = LengthOF array

  .code
    main PROC
    call randomize
    mov eax,b
    sub eax,a
    inc eax
    mov delta,eax
    mov esi,offset array
    mov edx,offset blank
mov ecx, lenarray

xxx:
push ecx
push esi    
bk: mov eax,delta
    call randomrange
    add eax,a
    mov esi,0    
    mov ecx,lenarray

Check:
 cmp eax,[esi]
 je bk                          ;if duplicate 
 add esi,4
 loop Check

 pop esi
 pop ecx
 call writedec
 call writestring
 mov [esi],eax
 add esi,4

 loop xxx 
4

1 回答 1

0

代替随机选择问题,您可以将其设置为您有一个伪随机交换的数字表,以为您提供所需的洗牌效果。

用您需要的每个数字填写表格,然后使用数字生成器,选择表格中的数字对,然后交换它们。这样,您可以选择要更改的项目数量,并确保不存在重复项,因为不会创建新编号。

于 2013-11-30T13:36:07.577 回答