首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何生成一个新的随机数和转置矩阵?

如何生成一个新的随机数和转置矩阵?
EN

Stack Overflow用户
提问于 2009-12-17 14:23:42
回答 6查看 999关注 0票数 0

谢谢你以前帮我的忙。但我还有一些关于这个项目的问题。当新的随机数等于前一个随机数时,如何生成一个新的随机数?另外,如何转置矩阵?

代码语言:javascript
复制
#include "stdafx.h" 
#include "stdlib.h"  
#include "time.h" 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    int num2 = 0; 
    int num=0, i, j;      
    int mtx[9][9] = {0};  

    while (num < 3 || num > 9) {  
        printf("Enter an integer (3-9): ");  
        scanf("%d", &num);  
    }  
do 
{ 
    srand(time(NULL));  

    switch (num) 
    { 
    case 3: num2 = rand() % 8; 
        break; 
    case 4: num2 = rand() % 15; 
        break; 
    case 5: num2 = rand() % 24; 
        break; 
    case 6: num2 = rand() % 35; 
        break; 
    case 7: num2 = rand() % 48; 
        break; 
    case 8: num2 = rand() % 63; 
        break; 
    case 9: num2 = rand() % 80; 
        break; 
    } 


    for (i=0; i < num; ++i)  
        for (j=0; j < num; ++j)  
            mtx[i][j] = num2;  
} 
while ( num2 == num2); 



    for (i=0; i < num; ++i) {  
    for (j=0; j < num; ++j)  
        printf("%i ", mtx[i][j]);  
    printf("\n");  
}  



    return 0; 
} 

更新:

代码语言:javascript
复制
#include "stdafx.h"
#include "stdlib.h" 
#include "time.h"


int _tmain(int argc, _TCHAR* argv[])
{
    int prevNum2 = 0;
    int num2 = 0;
    int num = 0, i, j;     // Added initializers and loop counters 
    int mtx[9][9] = {0}; // Reserve enough space for the worst-case scenario 

    while (num < 3 || num > 9) { // Added input validation loop 
        printf("Enter an integer (3-9): "); 
        scanf("%d", &num); 
    } 

    srand(time(NULL)); 

    do{

    prevNum2 =num2;
    switch (num)
    {
    case 3: num2 = rand() % 8;
        break;
    case 4: num2 = rand() % 15;
        break;
    case 5: num2 = rand() % 24;
        break;
    case 6: num2 = rand() % 35;
        break;
    case 7: num2 = rand() % 48;
        break;
    case 8: num2 = rand() % 63;
        break;
    case 9: num2 = rand() % 80;
        break;

    }




    // Loop through the matrix elements we want, filling each with a random number     
    for (i=0; i < num; ++i) 
        for (j=0; j < num; ++j) 
            mtx[i][j] = num2; 
    }
    while (num2 == prevNum2);

    /* Do something with the matrix here (display it, etc) */ 

    for (i=0; i < num; ++i) { 
    for (j=0; j < num; ++j) 
        printf("%i ", mtx[i][j]); 
    printf("\n"); 
} 



    return 0;
}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-12-17 14:42:20

我认为你应该改变这句话:

代码语言:javascript
复制
 while ( num2 == num2); 

因为对于num2的任何值,这将无限期地继续下去。

编辑:

为了使我的评论更清晰,这里有一些程序来使它工作:

代码语言:javascript
复制
do 
{ 
    srand(time(NULL));  

    switch (num) 

变成:

代码语言:javascript
复制
do
{
    int prevNum2 =num2;
    switch(num)

代码语言:javascript
复制
while ( num2 == num2);

变成:

代码语言:javascript
复制
while( num2 == prevNum2);

最后编辑:

在对编辑的响应中。这段代码显然不是您想要的:

代码语言:javascript
复制
for (i=0; i < num; ++i) 
    for (j=0; j < num; ++j) 
        mtx[i][j] = num2; 
}

它所做的就是用相同的数字填充整个矩阵。

你真正想要的(可能)是,每一个下一个单元格都填充一个不同的数字。为此,需要有某种类型的循环构造。

与…有关的东西:

代码语言:javascript
复制
 for(int i; i<num*num; i++)
 {
      //draw random number bit (shortened for clearity... should be your whole switch bit)
      num2 = rand() % 8;

      mtx[i%num][i/num] = num2;
 }

就这样..。这样,整个矩阵就会被随机值填充。不需要检查值是否已经绘制了before...since,这不是问题所在

票数 1
EN

Stack Overflow用户

发布于 2009-12-17 18:12:20

读取以下内容的代码部分

代码语言:javascript
复制
 switch (num)
   {
   case 3: num2 = rand() % 8;  break;
   case 4: num2 = rand() % 15; break;
   case 5: num2 = rand() % 24; break;
   case 6: num2 = rand() % 35; break;
   case 7: num2 = rand() % 48; break;
   case 8: num2 = rand() % 63; break;
   case 9: num2 = rand() % 80; break;
   }

可以重写为

代码语言:javascript
复制
 num2 = rand() % ((num * num) - 1);

更紧凑,也更清晰。

票数 2
EN

Stack Overflow用户

发布于 2009-12-17 14:27:27

正如Neil所说,srand()需要在程序开始时被调用一次。每次调用srand时,您都在播种随机数生成器,但是使用这个程序,它总是以相同的时间播撒种子,所以您将得到相同的随机数。

当然,从某些定义来看,这是完全随机的:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1922126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档