Scilab一个程序,麻烦找一下错误原因,再赐给个正确的

来源:百度知道 编辑:UC知道 时间:2024/05/28 10:05:11
问题用计算机产生随机数从40个学生的班级中随机抽取n个(n是自己输入的人数小于40,并打出抽取的学号。下面是我自己设计的。请找一下哪儿不对,再赐给我一个对的,非常感谢!
n=input("n=");
x=rand();
x=ceil(100*x);
if x<=40
x(1)=x
else
while x>40,
x=x-40;
end
x(1)=x
end
i=2
while i<=n,
x=rand();
x=ceil(100*x);
if x<=40
x(i)=x
else
while x>40
x=x-40;
end
x(i)=x
end
i=i+1;
for j=1:1:i-2
if x(i-1)==x(j)
i=i-1;
end
end
end
for p=1:1:n
print(%io(2),x(p))
end
很感谢super099海的回答。
我执行了一下你的程序,发现:会出现重复学号。
很希望以后可以再进行讨论。

本身你这个思想就不对啊,如果将80到100的数化成0到20的数,那么所抽取的学号0到20概率就会大于20到40的概率,就不是均匀抽取了.

还有你的错误好象在i=i+1和i=i-1这步上,你看这两步之后i的值没变啊,而前面用的是while循环,所以会一直循环下去的...

还有,你不能把同一个人的学号抽两次啊~~

以上是我的看法,可能与你的本意有点偏差,不过我喜欢和别人一起讨论!

我编了一个,你可以参考一下:
n=input("n=");
for i=1:1:n
i=i+1;
x=ceil(rand()*40);
m(i)=x;
if m(i)==m(i-1)
i=i-1;
end
i=i-1;
end
for j=1:1:n
a=m(j)
end