如何在指定坐标处显示模式对话框?如何快速产生指定范围的乱序数组? 默认状态下,程序 CMyDialog m_dlg; m_dlg.DoModal();显示的对话框在屏幕或应用程序的中间位置,如何将对话框显示在指定的位置?如左上角(0,0)处?(50分)如何快速产生指定范围内的乱序数组?(50分)(如产生1到88的乱序数组,要求:共88个数,互不相同) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 2。题像先srand(time(NULL));idrand(char * d,UINT n){ UINT i,j; for(i=0;i<n;i++) { j=rand()%62; if(j>35) d[i]=j+61; else if(j<10) d[i]=j+48; else d[i]=j+55; } d[i]=0;} sorry 上面的不对!~srand(time(NULL));for (int j=0; j<3; j++){ int temp, randnum; for (int i=0; i<n; i++) { randnum = rand() % n ; temp = array[i]; array[i] = a[randum]; array[randum] = array[i]; }} a[randnum] 为 array[randnum]randum 都是 randnum笔误,实在是抱歉阿,写太快了1 1,在对话框的OnInitDialog中: SetWindowPos(NULL,0,0,0,0,SWP_NOSIZE); 回复人: broadoceans(broadoceans) ( ) 信誉:100 2003-12-4 18:48:20 得分:50 其实很简单,下面是一个简单的函数void printserial(){ int a[12] = {1,2,3,4,5,6,7,8,9,10,11,12}; int i = 12; int j; srand( (unsigned)time( NULL ) ); while(i > 0) { j = rand(); j %= i; printf(" %d ",a[j]); a[j] = a[i - 1]; // 把最后一个拷贝到刚生成的位置 i--; } 问题1解决办法:重载PreCreatewindow()在里面修改 cs结构中的窗体位置字段或者在OnInitDialog里面用SetWindowPos()来改变问题2:例子:功能:对数组产生1-100之间的不同的随机数#define MIN_RAND 1#define MAX_RAND 100#define ARRAYCOUNT 10 问题2:诸位给的方法请自己试一下,我用类似的方法试过了,rand()%n(此处n=88),产生的随机数有很大的重码率(随n增大呈指数变化),比如产生序列:1,2,3,3,3,3,3,55,,66,1,1,1,0,8,8,8,8,8,8,8,8,8,所以得不到88个互不相同的序列!!!!!!!!,在1到10范围内用rand()%10得到互不相同的序列,我在PIII256M上半小时才得到!!!! 1. 在初始化函数OnInitDialog中调用SetWindowPos.也可以用MoveWindow来改变位置。2. 你每生成一个数字就和以前已经生成的进行比较,看有没有相同的,没有就添加到数组 中去。有就放弃这个数字,继续生成下个随机数。不过这样的开销好大的。效率不是很 高。 先依次赋值 for(i=0 ;i < 88 ; i++) num[i] = i ;然后产生随机数,根据随机数来交换位置srand(time(NULL));for (int j=0; j<1000; j++){ int temp1,temp2, temp; temp1 = rand() % 88 ; temp2 = array[i]; temp = num[temp1] ; num[temp1] = num[temp2] ; num[temp2] = temp ; }效果应该还可以 srand(time(NULL));int i,j,k,d[90],n=0; for(i=0;i<88;i++) {for(j=0;j<=i;j++) j=rand()%62; if(j>35) d[i]=j+61; else if(j<10) d[i]=j+48; else d[i]=j+55; } d[i]=0; 上面误操作,打错了,抱歉!srand(time(NULL));int i,j,k,d[88],n=0; for(i=0;i<88;i++) { while(true) { n=rand()%10000; j=0; while((j<=i)&&(n!=d[j])) j++; if(j>i) break; } d[i]=n;} mfc 中 插入文本 怎么弄? 我什么我使用VC的Trace输入的内容在Debug、Build和Results窗口都看不到?? 电源方案接管。。。。 编译缺少虚函数的实现 random的问题!!!!!!!!!!! 蔡鸟问题 紧急求救!!! 帮帮忙 各位大侠哪里有 人民邮电出版社出的 <Visual C++实战演练>这本书下载? 如何对光盘进行文件遍历? 新学vc,想做一个数据库软件,刚开始就卡壳了,各位能给看看吗? 有谁知道Winamp中同时拖动多个对话框的技术吗?? 请教如何判断计算机是否安装了微软的Agent控件 如何获取鼠标当前处的文本?
先
srand(time(NULL));
idrand(char * d,UINT n)
{
UINT i,j;
for(i=0;i<n;i++)
{
j=rand()%62;
if(j>35) d[i]=j+61;
else if(j<10) d[i]=j+48;
else d[i]=j+55;
}
d[i]=0;}
for (int j=0; j<3; j++)
{
int temp, randnum;
for (int i=0; i<n; i++)
{
randnum = rand() % n ;
temp = array[i];
array[i] = a[randum];
array[randum] = array[i]; }
}
其实很简单,下面是一个简单的函数
void printserial()
{
int a[12] = {1,2,3,4,5,6,7,8,9,10,11,12};
int i = 12;
int j;
srand( (unsigned)time( NULL ) );
while(i > 0)
{
j = rand();
j %= i;
printf(" %d ",a[j]);
a[j] = a[i - 1]; // 把最后一个拷贝到刚生成的位置
i--;
}
重载PreCreatewindow()在里面修改 cs结构中的窗体位置字段
或者在OnInitDialog里面用SetWindowPos()来改变
问题2:
例子:功能:对数组产生1-100之间的不同的随机数
#define MIN_RAND 1
#define MAX_RAND 100
#define ARRAYCOUNT 10
生序列:1,2,3,3,3,3,3,55,,66,1,1,1,0,8,8,8,8,8,8,8,8,8,所以得不到88个互不相同的序列!!!!!!!!,在1到10范围内用rand()%10得到互不相同的序列,我在PIII256M上半小时才得到!!!!
2. 你每生成一个数字就和以前已经生成的进行比较,看有没有相同的,没有就添加到数组
中去。有就放弃这个数字,继续生成下个随机数。不过这样的开销好大的。效率不是很
高。
for(i=0 ;i < 88 ; i++)
num[i] = i ;
然后产生随机数,根据随机数来交换位置
srand(time(NULL));
for (int j=0; j<1000; j++)
{
int temp1,temp2, temp;
temp1 = rand() % 88 ;
temp2 = array[i];
temp = num[temp1] ;
num[temp1] = num[temp2] ;
num[temp2] = temp ;
}
效果应该还可以
int i,j,k,d[90],n=0;
for(i=0;i<88;i++)
{
for(j=0;j<=i;j++) j=rand()%62;
if(j>35) d[i]=j+61;
else if(j<10) d[i]=j+48;
else d[i]=j+55;
}
d[i]=0;
srand(time(NULL));
int i,j,k,d[88],n=0;
for(i=0;i<88;i++)
{
while(true)
{
n=rand()%10000; j=0;
while((j<=i)&&(n!=d[j])) j++;
if(j>i) break;
}
d[i]=n;
}