C编程数组循环

  • 本文关键字:循环 数组 编程
  • 更新时间 :
  • 英文 :


对于我一直遇到的这个问题,任何帮助都将非常感激。我试图创建一个循环来找到一个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
}

最新更新