我想到的是:先把数组按照顺序初始化,然后随机从1~N-1取一个位置,把这个位置的值与放在N位置的值交换,然后再随机从1~N-2取一个,与放在N-1位置的值交换...直到只剩一个,放在那里不动。最终结果正好是倒序的每次取出的随机数,但有的数可能会被多次取到。

#include <stdio.h>
#define N 14
#define P {int i;for(i=1;i<=N;i++)printf("%d ",a[i]);printf("\n");}
int main()
{
int i=0;
int a[N+1];
int temp=0;
int j=0;
for(i=1;i<=N;i++) a[i]=i;
P
for(i=1;i<N;i++) 
{
j=rand()%(N-i)+1;
temp=a[j];
a[j]=a[N-i+1];
a[N-i+1]=temp;
P
}
return 1;
}

比如: 初始化 1 2 3 4 5
1. 找到1~4的随机数3,序列变为1 2 [5] 4 [3]
2. 找到1~3的随机数2,序列变为1 [4] 5 [2] 3
3. 找到1~2的随机数2,序列变为1 [5] [4] 2 3
其中4这个数就多次被取到。