如何产生一个相邻数据之差大于或等于2的随机系列

漫步者、 2013-06-10 02:30:35
给定一个一些数据:0,2,3,4.......8
要求:现在要求产生一个随机序列它们相邻间的数据的绝对值>=2,比如:0,2,4,6,3,5,7,1,8

想了好久都没有想出好的办法,望哪个高手指点或者提示一下。
...全文
124 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hqw19881118 2013-06-12
  • 打赏
  • 举报
回复
引用 5 楼 ganpengjin1 的回复:
[quote=引用 2 楼 hqw19881118 的回复:] 我写了一个,不知道是否符合你的要求,bless:
#include <iostream>
#include <ctime>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;

int generateInt(vector<int>& src, int pre_num){
    int len = src.size();
    if(len < 0){
        return -1;
    }
    while(true){
        int index = rand()%len;
        if(abs(src[index] - pre_num) >= 2){
            return src[index];
        }
    }
}

int main(){
    int a[] = {0, 2, 3, 4, 5, 6, 7, 8};
    int len = sizeof(a)/sizeof(int);
    vector<int> src(a, a+len);
    int num;
    cout<<"please input how many nums do you want:";
    cin>>num;
    if(num <= 0){
        return -1;
    }
    srand((unsigned int)time(NULL));
    int pre_num = src[rand()%len];
    vector<int> result(num);
    for(int i = 0; i < num; ++i){
        result[i] = generateInt(src, pre_num);
        pre_num = result[i];
    }
    //print the result
    copy(result.begin(), result.end(), ostream_iterator<int>(cout, ","));
    return 0;
}

虽然你的代码有问题,但是你的思路提醒了我,谢谢[/quote] ……具体是什么问题呢?欢迎指正哈
漫步者、 2013-06-10
  • 打赏
  • 举报
回复
引用 2 楼 hqw19881118 的回复:
我写了一个,不知道是否符合你的要求,bless:
#include <iostream>
#include <ctime>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;

int generateInt(vector<int>& src, int pre_num){
    int len = src.size();
    if(len < 0){
        return -1;
    }
    while(true){
        int index = rand()%len;
        if(abs(src[index] - pre_num) >= 2){
            return src[index];
        }
    }
}

int main(){
    int a[] = {0, 2, 3, 4, 5, 6, 7, 8};
    int len = sizeof(a)/sizeof(int);
    vector<int> src(a, a+len);
    int num;
    cout<<"please input how many nums do you want:";
    cin>>num;
    if(num <= 0){
        return -1;
    }
    srand((unsigned int)time(NULL));
    int pre_num = src[rand()%len];
    vector<int> result(num);
    for(int i = 0; i < num; ++i){
        result[i] = generateInt(src, pre_num);
        pre_num = result[i];
    }
    //print the result
    copy(result.begin(), result.end(), ostream_iterator<int>(cout, ","));
    return 0;
}

虽然你的代码有问题,但是你的思路提醒了我,谢谢
漫步者、 2013-06-10
  • 打赏
  • 举报
回复
#include <iostream>
#include <ctime>
#include <assert.h>
using namespace std;

const int Array_Len=9; 
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)
{
	assert(p);
	if(-1 == p[num])
		return true;
	return false;
}

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

void PrineResult(const int *p,int n)
{
	assert(p);
	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[Array_Len]={0};
	srand((unsigned int)time(NULL));
	int pre_num = a[rand()%Array_Len];
	for(int i = 0; i < Array_Len; ++i){
		result[i] = generateInt(a, pre_num,Array_Len);
		pre_num = result[i];
	}
	PrineResult(result,Array_Len);
	return 0;
}
漫步者、 2013-06-10
  • 打赏
  • 举报
回复
ls,我测试你的这段代码,貌似有问题
hqw19881118 2013-06-10
  • 打赏
  • 举报
回复
我写了一个,不知道是否符合你的要求,bless:
#include <iostream>
#include <ctime>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;

int generateInt(vector<int>& src, int pre_num){
    int len = src.size();
    if(len < 0){
        return -1;
    }
    while(true){
        int index = rand()%len;
        if(abs(src[index] - pre_num) >= 2){
            return src[index];
        }
    }
}

int main(){
    int a[] = {0, 2, 3, 4, 5, 6, 7, 8};
    int len = sizeof(a)/sizeof(int);
    vector<int> src(a, a+len);
    int num;
    cout<<"please input how many nums do you want:";
    cin>>num;
    if(num <= 0){
        return -1;
    }
    srand((unsigned int)time(NULL));
    int pre_num = src[rand()%len];
    vector<int> result(num);
    for(int i = 0; i < num; ++i){
        result[i] = generateInt(src, pre_num);
        pre_num = result[i];
    }
    //print the result
    copy(result.begin(), result.end(), ostream_iterator<int>(cout, ","));
    return 0;
}

漫步者、 2013-06-10
  • 打赏
  • 举报
回复
给定一个一些数据:0,1,2,3,4,5,6,7,8 要求:现在要求产生一个随机序列它们相邻间的数据的绝对值>=2,比如:0,2,4,6,3,5,7,1,8 想了好久都没有想出好的办法,望哪个高手指点或者提示一下。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧