十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
游戏中遇到这样的问题,需要将一组已知的数据打乱,按照以前和现在的做法,总结了以下方法。
目前创新互联公司已为千余家的企业提供了网站建设、域名、网络空间、绵阳服务器托管、企业网站设计、大新网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
方法一,最笨的菜鸟方法,也是容易想到的(幸好我没想过这种方法 :))
从已知数组中随机一个数,然后加入到另一个数组中,在加入之前,先检查是否已经加入过。
这种方法有很大运气成分,且数据越大,效率越低,超过一定数目,则程序几乎无法执行,会一直卡在那里,代码:
[java] view plain copy
package com.test;
import java.util.Random;
public class TestArray {
public static int runCount =0;//用于记录方法运算次数
数组大小 n; 一次产生2个 随机下标,交换这2个数;像炒饭似地 做它100次,就打得够乱了。
例子:
#includestdio.h
#includetime.h
int main( )
{
int a[50],v;
int i,i1,i2;
int n=50;
for (i=0;in;i++) a[i]=i;
srand(time(NULL));
for(i=0;i100;i++){
i1 = rand() % n;
i2 = rand() % n;
v=a[i1];a[i1]=a[i2];a[i2]=v;
}
for (i=0;in;i++) {
if (i % 10 == 0) printf("\n");
printf("%4d ",a[i]);
};
return 0;
}
Dim a(20), k
Dim i As Integer, j As Integer
Randomize
For i = 0 To 20
a(i) = i
Next
Print "原始数组:" Join(a, ", ")
For i = 0 To 20
j = Int(Rnd * (UBound(a) + 1))
k = a(i)
a(i) = a(j)
a(j) = k
Next
Print "打乱后的:" Join(a, ", ")