注册 登录
编程论坛 C++教室

关于C++程序 自建随机数 怎样做到每次运行时数值不同呀各位高手就这程序

renhao126 发布于 2008-04-13 22:37, 1877 次点击
#include "iostream.h"
#include "math.h"
#define S 2
float Xn=12345;
float Rn;
struct DataType{
    int temp;
    int key;
};
float Rnd(int k)
{             
    Xn=12354*k;
    Xn=(float)fmod((pow(2,16)+1)*Xn+(0.5+sqrt(3)/6)/pow(2,32),pow(2,32));
     //此式是的公式Xn+1=(Lamda*Xn+Miu)%M

        Rn=(float)Xn/pow(2,32);
//Rn+1=Xn/M
/*M=pow(2,32);
    Lamda=pow(2,16)+1;
    Miu=(0.5+sqrt(3)/6)/M;
*/
        return Rn;
}
void MyRnd(int n,struct DataType *a)
{  
    for(int j=1;j<n;j++)
       {            
            a[j].key=Rnd(j)*120;
            //cout<<a[j].key<<endl;
      }
}
void quicksort (struct DataType *a,int first,int end )
{
int i,j,temp;
    i=first; j=end; temp=a[i].key; //初始化
while(i<j)
{
while (i<j && temp<= a[j].key) j--;
a[i].key =a[j].key ;

while (i<j && a[i].key<=temp) i++;
a[j].key =a[i].key ;
}
a[i].key =temp;
if (first<i-1) quicksort(a, first, i-1); //对左侧分区域进行快速排序
if (i+1<end) quicksort(a, i+1, end); //对右侧分区域进行快速排序

}//这是一个快速排序的程序
void main(){
    int n;
    n=300;
    struct DataType a[300];
   MyRnd(n,a);
//for(int k=1;k<=300;k++) cout<<a[k].key<<endl;
   cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
quicksort(a,1,n);
for(int k=1;k<=300;k++) cout<<a[k].key<<endl;
}

[[it] 本帖最后由 renhao126 于 2008-4-14 12:11 编辑 [/it]]
13 回复
#2
renhao1262008-04-13 23:06
有个回话的撒有二天了
5555
#3
hitxinyu2008-04-13 23:06
数组越界了。
改成这样
    n=300;
[un]    struct DataType a[301];[/un]
或者
void MyRnd(int n,struct DataType *a)
{  
[un]    for(int j=0;j<n;j++)[/un]
    {            
        a[j].key=Rnd(j)*120;
        //cout<<a[j].key<<endl;
    }
}
#4
renhao1262008-04-13 23:10
不行
还是有内存不能读的错误
#5
renhao1262008-04-13 23:12
谢谢
#6
hitxinyu2008-04-13 23:13
好了么?
#7
renhao1262008-04-13 23:13
我总是这样粗心
太大意了呀
#8
hitxinyu2008-04-13 23:15
呵呵,要学会自己找错误啊。
#9
renhao1262008-04-13 23:17
我自已产生随机数怎样做到每次运行时不同
就这个程序怎么改呀
#10
hitxinyu2008-04-13 23:17
还有一点。
for的应用
不推荐
for(int j=1;j<=n;j++)
推荐
for(int j=0;j<n;j++)
忘记那个大师说的了
基本的思想好像是左闭右开
即[0,n)
循环的个数是n,这样不容易出错。也不容易引起歧义。
#11
renhao1262008-04-13 23:18
我自已产生随机数怎样做到每次运行时不同
就这个程序怎么改呀
#12
renhao1262008-04-13 23:19
呵呵
受教了
#13
hitxinyu2008-04-13 23:23
举个例子。
刚才我给你挑错的时候。
出现内存不能读的问题,一般是野指针或指针越界的问题。
1.先看看数组。
我把你那个数组先扩大10倍,运行,没问题。
说明是数组指针越界了。
然后就看到那个
 for(int j=0;j<n;j++)
即n=300时,赋值给a[300]了。
a[300]是第301个元素。。。。。
#14
jackie_wyx2008-04-14 16:08
可以在随机前加个srand(time(0));
1