(编译运行多次才会成功显示一次,大部分概率控制台无显示)
是否是因为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;
}
判断条件多少无所谓,就怕条件无法满足执行break,rand()的命中率太低,导致死循环
这是数独生成部分的代码
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y