一个面试题,不知道怎么做
有一个字符数组有{ 'a ', 'b ', 'c ', 'd ', 'e '},要求随机输出字符序列(字符不能重复)如:baecd
要求:时间复杂度O(n),C++或Java实现
[解决办法]
#include "stdio.h "
#include "time.h "
#include "stdlib.h "
void _swap(char& n1, char& n2)
{
char t = n1;
n1 = n2;
n2 = t;
}
int main()
{
char str[] = { 'a ', 'b ', 'c ', 'd ', 'e '};
int len = sizeof(str) / sizeof(*str);
srand(time(NULL));
for (int i = 0; i < len; i++)
{
int r = rand() % (len - i) + i;
printf( "%c ", str[r]);
_swap(str[r], str[i]);
}
return 0;
}
[解决办法]
#include "iostream.h "
#include "stdlib.h "
int main()
{
char ch;
int r;
char str[] = { 'a ', 'b ', 'c ', 'd ', 'e '};
int len = sizeof(str) / sizeof(*str);
len--;
for(int i=0;i <=len;i++)
{
r=(len-i!=0)?rand()%(len-i):0;
ch=str[r];
cout < <ch;
str[r]=str[len-i];
str[len-i]=ch;
}
cout < <endl;
return 0;
}
一个面试题,不知道如何做
一个面试题,不知道怎么做有一个字符数组有{ a , b , c , d , e },要求随机输出字符序列(字符不能重复)如:b
