默认状态下,程序 CMyDialog m_dlg;   m_dlg.DoModal();显示的对话框在屏幕或应用程序的中间位置,如何将对话框显示在指定的位置?如左上角(0,0)处?(50分)
如何快速产生指定范围内的乱序数组?(50分)
(如产生1到88的乱序数组,要求:共88个数,互不相同)

解决方案 »

  1.   

    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;}
      

  2.   

    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]; }
    }
      

  3.   

    a[randnum] 为 array[randnum]randum 都是 randnum笔误,实在是抱歉阿,写太快了1
      

  4.   

    1,在对话框的OnInitDialog中: SetWindowPos(NULL,0,0,0,0,SWP_NOSIZE);
      

  5.   

    回复人: 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--;
        }
      

  6.   

    问题1解决办法:
    重载PreCreatewindow()在里面修改 cs结构中的窗体位置字段
    或者在OnInitDialog里面用SetWindowPos()来改变
    问题2:
    例子:功能:对数组产生1-100之间的不同的随机数
    #define MIN_RAND 1
    #define MAX_RAND 100
    #define ARRAYCOUNT 10
      

  7.   

    问题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上半小时才得到!!!!
      

  8.   

    1. 在初始化函数OnInitDialog中调用SetWindowPos.也可以用MoveWindow来改变位置。
    2. 你每生成一个数字就和以前已经生成的进行比较,看有没有相同的,没有就添加到数组
       中去。有就放弃这个数字,继续生成下个随机数。不过这样的开销好大的。效率不是很
       高。
      

  9.   

    先依次赋值 
    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  ; 
    }
    效果应该还可以
      

  10.   

    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;
      

  11.   

    上面误操作,打错了,抱歉!
    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;
    }