主题:大家快来帮帮忙!!~~~~
花花美男子
[专家分:260] 发布于 2005-09-07 01:07:00
题目:编写一程序,验证角谷猜想。所谓的角谷猜想是:"对于任意大于1的自然数n,若n为奇数,则将n变为3*n+1,否则将n变为n的一半。经过若干次这样的变换,一定会使n变为1。"
我写的程序
program xj;
var
n:integer;
begin
readln(n);
repeat
if n mod 2=0 then n:=0.5*n
else n:=3*n+1;
until n:=1;
end.
错在哪里了?我不知道,谢谢
回复列表 (共6个回复)
沙发
zhsas [专家分:1680] 发布于 2005-09-07 14:17:00
program xj;
var
n:integer;
begin
readln(n);
repeat
if n mod 2=0
then n:=0.5*n{类型赋值不相容}
else n:=3*n+1;{这个;可以不要}
until n:=1;{多了:,这个;也是多余的}
end.
板凳
花花美男子 [专家分:260] 发布于 2005-09-07 18:22:00
楼上的,帮忙帮到底好吗?照你的意思,运行后,在n mod 2=0的等号处显示operand types do not match operator,谢谢啦,我初学
3 楼
mythjoker [专家分:400] 发布于 2005-09-07 20:12:00
因为N 定义的是整型
所以只能整除
改为: n:=n div 2
4 楼
zhsas [专家分:1680] 发布于 2005-09-07 20:37:00
最关键的错误,解决了这个问题就行了.
then n:=0.5*n{类型赋值不相容}
n为integer,2.5*n为real,这样就不相容了.
现在明白了吧................
5 楼
QQ331373582 [专家分:1500] 发布于 2005-09-08 20:07:00
如果N=3 的话
N:=3*N;永远也不会变成1
6 楼
lzl1403 [专家分:1670] 发布于 2005-09-09 21:20:00
楼上的:当n=3时:n依次变化为:3、10、5、16、8、4、2、1
我来回复