badbadbau 2021-05-07 15:34 采纳率: 0%
浏览 28

devc++ rand()在while循环里面会出现死循环?

(编译运行多次才会成功显示一次,大部分概率控制台无显示)

是否是因为while循环的if判断条件太多导致生成随机数的数目过多导致控制台无显示?

#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{    
    srand((unsigned int)time(0));                //用 srand 修改种子
    int a,r;
    int aa=0;                                
    int num1[9]={1,2,3,4,5,6,7,8,9};
    int num2[9]={1,2,3,4,5,6,7,8,9};
    int num3[9]={1,2,3,4,5,6,7,8,9};
    int num4[9]={1,2,3,4,5,6,7,8,9};
    int num5[9]={1,2,3,4,5,6,7,8,9};
    int num6[9]={1,2,3,4,5,6,7,8,9};
    int num7[9]={1,2,3,4,5,6,7,8,9};
    int num8[9]={1,2,3,4,5,6,7,8,9};
    int array[9][9];                            //生成9*9的数独棋盘

                                
/* 第一行*/
        for(int i=0; i<9; i++)                
            {
            r=rand()%(9-i);                        //生成随机数 
            array[0][aa]=num1[r];                    
                for(int j=r;j<9;j++)
                num1[j]=num1[j+1];
                aa++;
                }    
            aa=0;
/*第二行*/                
        
        for(int i=0; i<3; i++)                
            {                

                while(true){
                r=rand()%(9-i);                        //生成随机数 
                if(num2[r]!=array[0][0]&&num2[r]!=array[0][1]&&num2[r]!=array[0][2])
                break;                                                                             
            }
                array[1][aa]=num2[r];                                    
                for(int j=r;j<9;j++)
                num2[j]=num2[j+1];    
                aa++;        
            
}

        for(int i=3; i<6; i++)                
            {                

                while(true){
                r=rand()%(9-i);                        //生成随机数 
                if(num2[r]!=array[0][3]&&num2[r]!=array[0][4]&&num2[r]!=array[0][5])
                break;                                                                             
            }
                array[1][aa]=num2[r];                                    
                for(int j=r;j<9;j++)
                num2[j]=num2[j+1];    
                aa++;        
            
}
        for(int i=6; i<9; i++)                
            {                

                while(true){
                r=rand()%(9-i);                        //生成随机数 
                if(num2[r]!=array[0][6]&&num2[r]!=array[0][7]&&num2[r]!=array[0][8])
                break;                                                                             
            }
                array[1][aa]=num2[r];                                    
                for(int j=r;j<9;j++)
                num2[j]=num2[j+1];    
                aa++;        
            
}
                aa=0;
/*第三行*/                
        for(int i=0; i<3; i++)                
            {                

                while(true){
                r=rand()%(9-i);                        //生成随机数 
                if(num3[r]!=array[0][0]&&num3[r]!=array[0][1]&&num3[r]!=array[0][2]
                 &&num3[r]!=array[1][0]&&num3[r]!=array[1][1]&&num3[r]!=array[1][2])
                break;                                                                             
            }
                array[2][aa]=num3[r];                                    
                for(int j=r;j<9;j++)
                num3[j]=num3[j+1];    
                aa++;        
            
}

        for(int i=3; i<6; i++)                
            {                
                while(true){
                r=rand()%(9-i);                        //生成随机数 
                if(num3[r]!=array[0][3]&&num3[r]!=array[0][4]&&num3[r]!=array[0][5]
                    &&num3[r]!=array[1][3]&&num3[r]!=array[1][4]&&num3[r]!=array[1][5])
                break;                                                                             
            }
                array[2][aa]=num3[r];                                    
                for(int j=r;j<9;j++)
                num3[j]=num3[j+1];    
                aa++;        
            
}
        for(int i=6; i<9; i++)                
            {                

                while(true){
                r=rand()%(9-i);                        //生成随机数 
                if(num3[r]!=array[0][6]&&num3[r]!=array[0][7]&&num3[r]!=array[0][8]
                 &&num3[r]!=array[1][6]&&num3[r]!=array[1][7]&&num3[r]!=array[1][8])
                break;                                                                             
            }
                array[2][aa]=num3[r];                                    
                for(int j=r;j<9;j++)
                num3[j]=num3[j+1];    
                aa++;        
            
}
aa=0; 
                
/*第四行*/                
        for(int i=0; i<9; i++)                
            {                

                while(true){
                r=rand()%(9-i);                        //生成随机数 
                if(num4[r]!=array[0][i]&&num4[r]!=array[1][i]&&num4[r]!=array[2][i])
                break;                                                                             
            }
                array[3][aa]=num4[r];                                    
                for(int j=r;j<9;j++)
                num4[j]=num4[j+1];    
                aa++;        
            
}

aa=0; 
            
                    
            
/*第五行*/
        for(int i=0; i<3; i++)                
            {                

                while(true){
                r=rand()%(9-i);                        //生成随机数 
                if(num5[r]!=array[0][i]&&num5[r]!=array[1][i]&&num5[r]!=array[2][i]
                 &&num5[r]!=array[3][0]&&num5[r]!=array[3][1]&&num5[r]!=array[3][2])
                break;                                                                             
            }
                array[4][aa]=num5[r];                                    
                for(int j=r;j<9;j++)
                num5[j]=num5[j+1];    
                aa++;        
            
}

        for(int i=3; i<6; i++)                
            {                
                while(true){
                r=rand()%(9-i);                        //生成随机数 
                if(num5[r]!=array[0][i]&&num5[r]!=array[1][i]&&num5[r]!=array[2][i]
                 &&num5[r]!=array[3][3]&&num5[r]!=array[3][4]&&num5[r]!=array[3][5])
                break;                                                                             
            }
                array[4][aa]=num5[r];                                    
                for(int j=r;j<9;j++)
                num5[j]=num5[j+1];    
                aa++;        
            
}
        for(int i=6; i<9; i++)                
            {                
                while(true){
                r=rand()%(9-i);                        //生成随机数 
                if(num5[r]!=array[0][i]&&num5[r]!=array[1][i]&&num5[r]!=array[2][i]
                 &&num5[r]!=array[3][6]&&num5[r]!=array[3][7]&&num5[r]!=array[3][8])
                break;                                                                             
            }
                array[4][aa]=num5[r];                                    
                for(int j=r;j<9;j++)
                num5[j]=num5[j+1];    
                aa++;        
            
}
aa=0; 

/*第六行*//*
        for(int i=0; i<3; i++)                
            {                

                while(true){
                r=rand()%(9-i);                        //生成随机数 
                if(num6[r]!=array[0][i]&&num6[r]!=array[1][i]&&num6[r]!=array[2][i]&&num6[r]!=array[3][i]&&num6[r]
                 &&num6[r]!=array[4][0]&&num6[r]!=array[4][1]&&num6[r]!=array[4][2]&&num6[r]!=array[3][0]&&num6[r]!=array[3][1]&&num6[r]!=array[3][2])
                break;                                                                             
            }
                array[5][aa]=num6[r];                                    
                for(int j=r;j<9;j++)
                num6[j]=num6[j+1];    
                aa++;        
            
}

        for(int i=3; i<6; i++)                
            {                
                while(true){
                r=rand()%(9-i);                        //生成随机数 
                if(num6[r]!=array[0][i]&&num6[r]!=array[1][i]&&num6[r]!=array[2][i]&&num6[r]!=array[3][i]
                 &&num6[r]!=array[4][3]&&num6[r]!=array[4][4]&&num6[r]!=array[4][5]&&num6[r]!=array[3][3]&&num6[r]!=array[3][4]&&num6[r]!=array[3][5])
                break;                                                                             
            }
                array[5][aa]=num6[r];                                    
                for(int j=r;j<9;j++)
                num6[j]=num6[j+1];    
                aa++;        
            
}
        for(int i=6; i<9; i++)                
            {                
                while(true){
                r=rand()%(9-i);                        //生成随机数 
                if(num6[r]!=array[0][i]&&num6[r]!=array[1][i]&&num6[r]!=array[2][i]&&num6[r]!=array[3][i]
                 &&num6[r]!=array[4][6]&&num6[r]!=array[4][7]&&num6[r]!=array[4][8]&&num6[r]!=array[3][6]&&num6[r]!=array[3][7]&&num6[r]!=array[3][8])
                break;                                                                             
            }
                array[5][aa]=num6[r];                                    
                for(int j=r;j<9;j++)
                num6[j]=num6[j+1];    
                aa++;        
            
}
                aa=0; */
/*第七行*//*
        for(int i=0; i<3; i++)                
            {                

                while(true){
                r=rand()%(9-i);                        //生成随机数 
                if(num7[r]!=array[0][i]&&num7[r]!=array[1][i]&&num7[r]!=array[2][i]&&num7[r]!=array[3][i]&&num7[r]!=array[3][i]&&num7[r]!=array[4][i]&&num7[r]!=array[5][i])
                break;                                                                             
            }
                array[6][aa]=num7[r];                                    
                for(int j=r;j<9;j++)
                num7[j]=num7[j+1];    
                aa++;        
            
}

        for(int i=3; i<6; i++)                
            {                
                while(true){
                r=rand()%(9-i);                        //生成随机数 
                if(num7[r]!=array[0][i]&&num7[r]!=array[1][i]&&num7[r]!=array[2][i]&&num7[r]!=array[3][i]&&num7[r]!=array[3][i]&&num7[r]!=array[4][i]&&num7[r]!=array[5][i])
                break;                                                                             
            }
                array[6][aa]=num7[r];                                    
                for(int j=r;j<9;j++)
                num7[j]=num7[j+1];    
                aa++;            
            
}
        for(int i=6; i<9; i++)                
            {                
                while(true){
                r=rand()%(9-i);                        //生成随机数 
                if(num7[r]!=array[0][i]&&num7[r]!=array[1][i]&&num7[r]!=array[2][i]&&num7[r]!=array[3][i]&&num7[r]!=array[3][i]&&num7[r]!=array[4][i]&&num7[r]!=array[5][i])
                break;                                                                             
            }
                array[6][aa]=num7[r];                                    
                for(int j=r;j<9;j++)
                num7[j]=num7[j+1];    
                aa++;            
            
}
                aa=0;*/
/*第八行*/

/*第九行*/

 
/*输出数独*/    
        for(int y = 0;y < 9;++y)        
        {
        cout<<array[0][y]<<" ";        
        }        
        cout<<endl;
        for(int y = 0;y < 9;++y)        
        {
        cout<<array[1][y]<<" ";        
        }
            cout<<endl;
        for(int y = 0;y < 9;++y)        
        {
        cout<<array[2][y]<<" ";        
        }
        cout<<endl;
        for(int y = 0;y < 9;++y)        
        {
        cout<<array[3][y]<<" ";        
        }
        cout<<endl;
        for(int y = 0;y < 9;++y)        
        {
        cout<<array[4][y]<<" ";        
        }
        cout<<endl;


        


        
    
    
    

}
  • 写回答

5条回答 默认 最新

  • 快乐鹦鹉 2021-05-07 15:51
    关注

    判断条件多少无所谓,就怕条件无法满足执行break,rand()的命中率太低,导致死循环

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog