前辈们帮忙做道简单的汇编题……急~

evilknife 2010-05-10 08:19:40
设有N个人围成一圈,顺序排号。从第1个人开始报数(从1到3循环报数),凡报到3的人退出圈子。编写程序计算最后留下的人的序号。

本人汇编初学者,看了很久,没结果,高手帮帮忙,很急,先谢过了~
...全文
97 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
伊吹萃香 2010-05-10
  • 打赏
  • 举报
回复
QQ的话,405957164
evilknife 2010-05-10
  • 打赏
  • 举报
回复
1楼的前辈的代码很好,在此深表感谢
能留下QQ或邮箱吗?以后还有问题想交流~
大熊猫侯佩 2010-05-10
  • 打赏
  • 举报
回复
猥琐的重构之:

def say3(n)
mans = (1..n).to_a;turns=count3 = 0
while mans.size>1
mans.reject! {|man| count3+=1;count3%3 == 0};p "#{turns+=1} turn : #{mans}"
end;p "luck man'index is #{mans[0]}"
end

大熊猫侯佩 2010-05-10
  • 打赏
  • 举报
回复
上伪代码:

def say3(n)
mans = (1..n).to_a
turns=count3 = 0
while mans.size>1
mans.reject! {|man| count3+=1;count3%3 == 0}
p "#{turns+=1} turn : #{mans}"
end
p "luck man'index is #{mans[0]}"
end


输出:

say3 27
"1 turn : [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26]"
"2 turn : [1, 2, 5, 7, 10, 11, 14, 16, 19, 20, 23, 25]"
"3 turn : [1, 2, 7, 10, 14, 16, 20, 23]"
"4 turn : [1, 2, 10, 14, 20, 23]"
"5 turn : [2, 10, 20, 23]"
"6 turn : [10, 20]"
"7 turn : [10, 20]"
"8 turn : [20]"
"luck man'index is 20"
伊吹萃香 2010-05-10
  • 打赏
  • 举报
回复
你和jhello这个ID的主人是同学吧?都来问这作业题目……
对应的C语言程序这么写(使用递推式,非模拟):


  #include <stdio.h>
  int main(void)
  {
   int n, i, s=0;
  printf ("N = ");
  scanf("%d", &n);
  for (i=2; i<=n; i++)
  s=(s+3)%i;
  printf (" %d\n", s+1);
  return 0 ;
  }


用32位汇编的话,就这样写:

.386
.model flat, stdcall
option casemap :none

includelib msvcrt.lib
scanf PROTO C :DWORD, :VARARG
printf PROTO C :DWORD, :VARARG
getchar PROTO C

.data
szResult byte "result is %d", 0
szFormat byte "%d", 0
n DWORD 0

.CODE
START:
invoke scanf, offset szFormat, offset n
xor edi, edi
mov ecx, 2
step:
add edi, 3
xor edx, edx
mov eax, edi
div ecx
mov edi, edx
inc ecx
cmp ecx, n
jbe step
inc edi
invoke printf, offset szResult, edi
invoke getchar
ret
end START

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧