对于我一直遇到的这个问题,任何帮助都将非常感激。我试图创建一个循环来找到一个30x30的数组,其主要对角线值都大于或等于7。数组用随机整数填充。
我的问题是循环本身,我似乎不知道如何创建这么大的一系列循环…快把我逼疯了!
当我设法创建了一个符合条件的数组时,我需要显示它尝试了多少次。如果需要超过100万次尝试,程序应该简单地"放弃",并显示这是不可能的。
这是我到目前为止设法想出的(不是整个代码,只是我需要帮助的那一点),但是输出实际上什么也没有。我保证我甚至都没有找到正确的解决方案……但我希望你能给我指出正确的方向!
Thanks in advance:)
count=0;
for(a=0;a<30;++a)
for(b=0;b<30;++b)
random2[a][b]=rand()%10;
while(count<=1000000)
{
for(a=0;a<30;++a)
{
if(random2[a][a]>=7)
{
++a;
if(a==30&&random2[a][a]>=7)
printf("%d", count);
}
else
{
++count;
for(a=0;a<30;++a)
for(b=0;b<30;++b)
random2[a][b]=rand()%10;
}
}
}
printf("%d", count);
您在循环中做了一些奇怪的事情。简单的修复是删除一个++a
s(我建议第二个),并删除else中的break
。
更好的解决方法是按你的意思编码。要尽量减少对示例的更改:
int count,a,b;
for(count = 0; count<=1000000; ++ count) {
for(a=0;a<30;++a)
for(b=0;b<30;++b)
random2[a][b]=rand()%10;
for(a=0;a<30;++a)
{
if(random2[a][a]>=7)
{
if(a==30&&random2[a][a]>=7)
printf("%d", count);
}
else
{
break;
}
}
if( a == 30 ) {
break;
}
}
一个更好的修复是计算你的数组算法,而不是依靠随机的机会给你一个好的结果。例如,将对角线随机设置为7、8或9(这将给出相同的最终结果和概率)。
您将内部for循环计数器'a'与值计数器(在您的程序中也是'a')混合在一起。试试这样做:
int found = 0;
for (count = 1; count <= 1000000 && !found; count++) {
// (re)fill the array with random numbers
for (a = 0; a < 30; a++) for (b = 0; b < 30; b++) random2[a][b] = rand() % 10;
// now check the array
found = 1; // assume all values are >= 7
for (a = 0; a < 30; a++)
if (random2[a][a] < 7) { // found a bad value
found = 0;
break;
}
}
我觉得行有问题
if(a==30&&random2[a][a]>=7)
既然你说数组是30x30,那么索引的最大值是29x29。所以random2[30][30]
不存在。至于代码,请尝试
while(count<=1000000)
{
for(a=0;a<30;a++)
{
for(b=0;b<30;b++)
{
random2[a][b]=rand()%10;
if(a==b)
{
while(random2[a][a]<7)
{
++count;
random2[a][b]=rand()%10;
}
}
}
}
}
这将给你你需要的数组
如果你想让count的值更小,使用
if(random2[a][a]<7)
{
random2[a][a]=(rand()+7)%10
}