请问从c++高手们如何实现对数组不重复的随机赋值?

作者&投稿:度关 (若有异议请与网页底部的电邮联系)
C++给一个数组随机赋值~

a[24]只有24个元素,应该定义成a[25]
将a[0]~a[24]赋予连续的1~25,
然后产生两个0~24的随机数,将数组对应下标元素的数值交换。重复这个过程若干次,应该就能满足要求了。

#include #include #include using namespace std;void RandArray(int a[], int n){ int i; srand(time(0));//rand前先用srand设置随机种子,srand只需调用一次 for(i=0;i<n;i++) { a[i] = rand();//rand需放在循环中 }}int main(){ int a[30] = {0}; int i; RandArray(a, sizeof(a)/sizeof(int)); for(i=0;i<sizeof(a)/sizeof(int);i++) { cout << "a[" << i << "] = " << a[i] << endl; } return 0;}

用srand()和rand()函数,srand()用来生成种子,rand()产生伪随机数,注意如果要取0~9的话要注意取模.这个函数具体用法可以参考MSDN.
改成:#include <time.h>

算法:用srand()和rand()函数控制生成随机数,然后拿来跟已赋值过的元素对比,重复就不要,再重新生成,再判断.

#include <iostream>
#include "sys/time.h"
using namespace std;

int main(){
int a[10];
for(int i=0;i<10;i++)
a[i]=-1;
struct timeval tnow;
gettimeofday(&tnow,0);
srand(tnow.tv_usec);
for(int i=0;i<10;i++){
int r=rand()%(10-i);
int pos=0,j=0;
while(pos<10){
if(a[pos]==-1) j++;
if(j>r) break;
pos++;
}
a[pos]=i;
}
for(int i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
return 1;
}

才10个数?可以穷举。
#include <iostream>
using namespace std;
#include <cstdlib>
#include <ctime>
int main (void)
{
int a[10];
int i,j;
bool ok;
srand(time(0));
a[0]=rand()%10
for (i=1;i<10;i++)
{
while (1)
{
a[i]=rand()%10;
ok=true;
for (j=i-1;j>=0;j++)
{
if (a[i]==a[j]) ok=false;
}
if (ok) break;
}
}
for (i=0;i<10;i++)
cout<<a[i]<<' ';
cout<<endl;
exit(0);
}
时间效率不是很高,但针对10个数够了。
还有这个程序是我现编的,有可能有细节问题没注意。请谅解。


请问从c++高手们如何实现对数组不重复的随机赋值?
用srand()和rand()函数,srand()用来生成种子,rand()产生伪随机数,注意如果要取0~9的话要注意取模.这个函数具体用法可以参考MSDN.改成:#include

请C++高手们帮忙解答:关于使用string时可不可以用头文件#include<string...
include <string.h> --> #include <cstring> 还要提及的一点是,我在看C++标准库的时候,看到一个特殊情况 <memory.h> 和 <memory>,这两个头文件是完全不同的,因为我发现 <memory.h>头文件件包含了 <mem.h>;而 <memory> 包含 <memory.stl> 这里摘录 memory.h 中的一段代码: (以上...

想问下c或c++高手们的真实学习心得...
如果真的想要学好这么课,或者说是从这门课学到点什么东西的话,那就是两个字:实践。所谓的实践就是自己上机练习,至少要把书上的例子调试通过,这很重要,因为一般数据机构后面的一些编程习题是再次基础上加进去的。书上的成员函数的实现它不会全部写出来,只把当前所讲的一些重要的代码给出,基本上...

C++高手们我想问一下 a=2*k!=im;这句是什么意思,是怎么样运算的?_百 ...
这句清楚一点应该是:a = ( (2*k) != (!m) );即把k乘2,再把m取反,作比较是否不等,将结果赋值为a.逻辑上来说这个没什么实际意义。因为!m或者1(true)或者0(false). 而2*k只能在k = 0时是0。其他情况也不等于1。所以只有m == true 而 k = 0(false)时,a才会为false。因此这...

请C++高手们帮我找一下以下程序的错误吧!(在VC++6.0环境下编译的)_百 ...
Point::Point(double a=0,double b=0)\/\/使用后就可以加 这是一种符合规范的书写格式,因为主要的是声明函数,不需要指定出的默认值,等使用后就可以加上自己的默认值了.(2)在构造函数声明加默认形参值,后面定义时不要加.因为在声明的时候规定了默认值,所以在重新定义的时候就不需要再加默认的参数....

高手们 谁能把C++中的关键字及其每个关键字的用法和意思帮我总结一下...
asm已经被__asm替代了,用于汇编语言嵌入在C\/C++程序里编程,从而在某些方面优化代码.虽然用asm关键字编译时编译器不会报错,但是asm模块的代码是没有意义的.(2)auto 这个这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视...

请教高手们,在C++MFC编程中怎样建立指定路径下的txt文本?
\/\/以下一一种建立并写入TXT文件的方式 CFile file; CString filepath,filename,s; filepath=_T("c:\\\\"); \/\/文件位置 filename="a.txt"; \/\/文件名 filename=filepath+filename; \/\/文件路径 file.Open(filename,CFile::modeCreate|CFile::modeWrite);\/\/建立文件 s="Hello Motor!"; ...

C++高手请帮助
1、首先看图书包括什么属性:图书编号(应该能确定是那本书),图书名,作者,等等这些是常用的,能确定这本书的一些属性。有的时候不需要全部都写,不过这一类的数据不能少 2、然后是看看干什么用的。像你这个题目,应该是买书卖书的样子。那就应该有图书的价格吧。应该有买几本书吧。从设计的角度...

C++ 高手们过来帮帮忙
我以前用openGL和DevIL做过个类似的。C++的语言风格。 #include <windows.h> include <stdio.h> include <stdlib.h> include <vector> include <algorithm> include <iostream> include <GL\/gl.h> include <GL\/glu.h> include "GL\/glut.h"include "IL\/il.h"include "IL\/ilu.h"include "IL\/...

请C++编程高手们帮我解答:带默认参数的构造函数在声明和定义时是否应...
两个地方都需要申明参数,但是在类中申明构造函数时候需要参数默认值,如:Class X { X(int a=5);} 在实现时候不用再给出默认值:X::X(int a){ ...}

沭阳县17845319559: 请问从c++高手们如何实现对数组不重复的随机赋值? -
狄仲阿洛: 用srand()和rand()函数,srand()用来生成种子,rand()产生伪随机数,注意如果要取0~9的话要注意取模.这个函数具体用法可以参考MSDN. 改成:#include <time.h>

沭阳县17845319559: 如何用c++实现对原始一维数组的变换 线性变换算法为T(bx)=bT(x)+i i为数... -
狄仲阿洛: 楼主哥哥,看下面,你把这个函数看成一个f(x)当x=NULL f(x)=0;当x左右子树为空 f(x)=1;其他 f(x)...

沭阳县17845319559: 在C++中怎么实现在定义数组时不设定大小,根据文件大小来给定数组大小 -
狄仲阿洛: windows: int max_len = 40*1024*1024; int remain=0;PLARGE_INTEGER li; BOOL sucess =GetFileSizeEx(hFile,&li);LONGLONG filelen =li.QuadPart;char *p; remain =filelen % max_len; if(filelen> max_len )// >40M {p=new char[ max_len+4];...

沭阳县17845319559: c++对数组进行排序求和 -
狄仲阿洛: 搞定.....#include <iostream> using namespace std;//pre: unsorted array //post: sorted array template<class T> void sort(T* begin, int size) { for (int i = size - 1; i > 0; i--){ for (int j = 0; j < i; j++){ if (begin[j] > begin[j + 1]){ T tmp = begin[j]; begin[...

沭阳县17845319559: VC++中能否实现对数组的批量赋值 -
狄仲阿洛: 用个中间数组 比如 float TEST[5] = {0}; 这时候你想把{0.5,1, 0.5, 1, 1}批量赋值给TEST,因为可以在初始化的时候进行批量,所以用一个临时数组 float temp[5] = {0.5,1, 0.5, 1, 1}; 然后拷贝到目标数组就行了这样代码会少些 memcpy(TEST,temp,5*sizeof(float)); float TEST[5] = {0}; ...float temp[5] = {0.5,1, 0.5, 1, 1}; memcpy(TEST,temp,5*sizeof(float));

沭阳县17845319559: C++中数组运算 -
狄仲阿洛: 不可以,s[0]++;s[1]++;s[2]++... 不是变量 if(int i=0;i用for(int i=0;i

沭阳县17845319559: 请问一下各位高手在C++中数组类的构造函数怎么写? -
狄仲阿洛: 数组类?你是说数组吧?构造函数?你是说赋值函数吧?如果有规律的赋值,就用for循环和规律来做到.如果靠输入的话,就用for循环配合输入函数来写

沭阳县17845319559: 麻烦c++高手来看一下一个关于数组比较的题 -
狄仲阿洛: #include <iostream> using namespace std; void main() { int a[1000] = {0} ; int acount; int b[1000] = {0}; int bcount; int i = 0; cout << "请输入数组a:(999退出)"<<endl; while(1) { cin >> a[i]; if (a[i] == 999) { i--; break; } i++; } acount = i; i = 0; cout << "请...

沭阳县17845319559: C++编程问题,高手请进. 编写程序,实现给定的二维数组(M*N)的转置(行列互换)... -
狄仲阿洛: //当行列不相等时,不在在自身上进行转置的,只能将行列互换的结果存入另一数组.#include#define M 4#define N 5void main(){ int a[M][N]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20}}; int b[N][M]; int i,j; for(i=0;i for(j=0;j b[j][i]=a[i][j]; ...

沭阳县17845319559: 使用C++语言开发一个动态数组,并实现其增删改查 -
狄仲阿洛: 用STL中的vector实现就简单了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网