int a[10] = {0,1,2,3,4,5,6,7,8,9};
int b[10];srand( (unsigned)time( NULL ) );b[0] = rand()%10;   //b[0]为0~9之间的随机数for(int i = 1;i<10;i++)
{
    b[i] = rand()%10;    for(int j = 0;j<i;j++) //如果跟前面有一样的就不要,重新取
    {
            if(b[i] == b[j])
            {
                i = i - 1;
                break;
            }
     }
}      

解决方案 »

  1.   

    继续for (i = 0;i<10;i++)
    {
        b[i]=a[b[i]];           //比如b[3] = 7,则 b[3] = a[7]
    }
      

  2.   

    以上两段程序就把数组a中的顺序打乱存放到备份数组b中去了。如果a的元素个数为n,就把上面的rand()%10换成rand()%n就好了。
      

  3.   

    try something like this:  int x[] = {0,1,2,3,4,5,6,7,8,9};
      int n = sizeof(x)/sizeof (int);
      int i;
      for (i=0; i < n; i++)
    cout << x[i] << " ";
      cout << endl;  srand((unsigned)time(NULL));
     
      for (i=n-1; i >0; i--)
      {
    int j= rand() % i;
    int y = x[i];
    x[i] = x[j];
    x[j]=y;
      }  for (i=0; i < n; i++)
    cout << x[i] << " ";
      cout << endl;
      

  4.   

    我的思路是,假如有10 个数,则第一次从前面的九数中,随机选一个,让它和最后一个数交换,然后再对前面那9个数做重复的操作,直到最后一个
    int a[N];
    int nTemp;
    for(int i=0;i<N-1;i++)
    {
       int nPos=rand()%(N-i-1);//每次从前面的n 个数中随机选出一个,因为下标是从0开始的,所以要减1
       nTemp=a[N-i];
       a[N-i]=a[nPos];
       a[nPos]=nTemp;
    }
      

  5.   

    先用srand(unsigned int )设置随机数种子,然后调用rand()返回一个位随机数,在0~0x7fff之间。由于不是真正的随机数,只是一种算法,所以最好取时间为种子。还有一点对于同一个种子,rand()的次数越多,数字越随机。比如
    srand(40);
    int a = rand();
    int b = rand();
    int c = rand();
    int d = rand();
    int e = rean();可能你用40作种子,每次运行程序得到的a都差不多大,但是e肯定是很随机的。
      

  6.   

    to : 前面提出随机交换的几个朋友,你们有没有想过,题目并没有说过每个数都不能是原来的数,运行过后,a[n]仍然可以是原来的a[n]嘛!!!
      

  7.   

    请看我的短小精悍的代码
    我的思路是,假如有10 个数,则每一步从前面的9个数中随机选一个数,让它和数组的最后一个数交换,第二步则剩下的前面9个数再一遍,这样一直到最后一个数为止!这样只需要做9遍就可以啦,因为只剩下一个数时,再交换就没有意义啦!
    int a[10];
    int nTemp;
    for(int i=0;i<9;i++)
    {
      int nPos=rand()%(9-i);
      nTemp=a[9-i];
      a[9-i]=a[nPos];
      a[nPos]=nTemp;
    }
      

  8.   

    to:awanghero(念天地之悠悠,独怆然而悌下!)老兄:
    “每一步从前面的9个数中随机选一个数,让它和数组的最后一个数交换”
    有没有想过,题目并没有说过每个数都不能是原来的数,你这样运行过后,"数组的最后一个数"就一定不能是原来的最后一个数了.
      

  9.   

    最后总结:经过讨论,我觉得我前面的代码能够真正随机,也就是说每个数都可能换成10个数中的某个数(而不是剩下的9个数中的某个数,它可能不换).但是我的代码不够短小精悍.所以我觉得应该修改如下:int a[10] = {0,1,2,3,4,5,6,7,8,9};
    int nTemp;
    for(int i=0;i<10;i++)
    {
      int nPos=rand()%10;    //从10个数中取出一个和a[i]交换,可能是它自己。
      nTemp=a[i];
      a[i]=a[nPos];
      a[nPos]=nTemp;
      

  10.   

    看起像是我在抄karma(无为) 兄弟的!
    不过我以前做的扫雷的布雷算法是,一直是用这个算法的!
    见笑了
      

  11.   

    int nPos=rand()%10;   这与初衷有不符,一来达不到那种追求足够乱的效果,二来也浪废时间!