常规做法:生成一个随机数,存在数组中。往后每次生成一个随机数,都需要遍历前面的数组,如果相同则需要重新生成一个随机数,再重新比较一遍,这样非常麻烦!
改进版做法:先得到一个26个字母组成的数组,再用随机数把数组打乱(两两交换即可实现)
#include<iostream>
using namespace std;
int main
{
const int N = 16;//不重复字母数组的长度
srand((unsigned int)time(0));//生成随机数
char arr[26];
for (int i = 0; i < 26; i++) arr[i] = 'a' + i;//生成一个26个字母的数组(顺序)
for (int i = 0; i < N; i++)//将字母数组打乱顺序
{
int p = rand() % 26, q = rand() % 26;
int temp = arr[p];
arr[p] = arr[q];
arr[q] = temp;
}
//输出结果:
//取该数组的前16为就是我们需要的数组了
for (int i = 0; i < N; i++)
{
cout << arr[i]<<" ";
}
}