3

对于我遇到的这个问题,任何帮助将不胜感激。我正在尝试创建一个循环来查找一个 30x30 数组,其主对角线值都大于或等于 7。这些数组填充了随机整数。

我的问题是循环本身,我似乎无法弄清楚如何创建如此大的一系列循环..让我发疯!

当我设法创建一个符合条件的数组时,我需要显示它进行了多少次尝试。如果尝试超过 100 万次,程序应该简单地“放弃”,表明这是不可能的。

到目前为止,这是我设法提出的(不是整个代码,只是我需要帮助的一点),但是输出实际上什么都没有。我保证我什至没有接近正确的解决方案......但我希望能指出正确的方向!

提前致谢 :)

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);                    
4

3 回答 3

1

您在循环中做了一些奇怪的事情。简单的修复是删除其中一个++as(我建议第二个),并break在 else 中删除。

更好的解决方法是按照您的意思进行编码。为了最小地改变你的例子:

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(这将给出相同的最终结果和概率)。

于 2013-03-31T15:20:04.047 回答
1

我认为线路有问题

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
}
于 2013-03-31T15:21:31.617 回答
1

您正在将内部 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;
    }
}
于 2013-03-31T15:21:36.430 回答