首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

发生一个随机序列

2013-07-01 
产生一个随机序列给定一个一些数据:0,1,2,3,4,5,6,7,8要求:现在要求产生一个随机序列它们相邻间的数据的绝

产生一个随机序列
给定一个一些数据:0,1,2,3,4,5,6,7,8
要求:现在要求产生一个随机序列它们相邻间的数据的绝对值>=2,比如:0,2,4,6,3,5,7,1,8

想了好久都没有想出好的办法,望哪个高手指点或者提示一下。 
[解决办法]

#include <iostream>
#include <ctime>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;

int generateInt(int* src, int pre_num,int num);
bool IsSelected(const int *p,int num,int n);
void SelectTheNum(int *p,int num);

int generateInt(int* src, int pre_num,int num)
{
int index = rand()%num;
bool bSelected=false;
while(!bSelected)
{
if(!IsSelected(src,index,num) && (abs(src[index] - pre_num) >= 2))
{
SelectTheNum(src,index);
bSelected=true;
}
else
index = rand()%num;
}
return index;
}

bool IsSelected(const int *p,int num,int n)
{

if(-1 == p[num])
return true;
return false;
}

void SelectTheNum(int *p,int num)
{
 p[num]=-1;
}

void PrineResult(const int *p,int n)
{
for(int i=0; i < n; ++i)
{
cout<<p[i]<<"  ";
}
cout<<endl;
}

int main()
{
int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
int result[9]={0};
srand((unsigned int)time(NULL));
int pre_num = a[rand()%9];
for(int i = 0; i < 9; ++i){
result[i] = generateInt(a, pre_num,9);
pre_num = result[i];
}
PrineResult(result,9);
return 0;
}

热点排行