通过条件在数组的对角线中生成整数

时间:2014-04-01 19:47:26

标签: c arrays multidimensional-array

我必须继续生成10乘10阵列,直到阵列的对角线由大于或等于7的数字组成。但是尝试次数不应增加100万次。如果尝试次数少于一百万次,那就是打印出对角线中的数字大于7的数组和尝试次数。这是我的代码,事情是我的代码总是显示尝试次数超过一百万。有人可以查看代码并告诉我为什么这不能正常工作吗?

int i, j, matrix2[10][10], attempts, count = 0; 
for (attempts=0; attempts<1000000; attempts++)
{
    for (i=0; i<10; i++)
    {
        for (j=0; j<10; j++)
        {
            matrix2[i][j] = rand()%10;
            if(i==j&&matrix2[i][j] >= 7)
                count++;
        }
    }
}
printf("\n\nNumber of attempts : %d", count);
if (attempts >= 1000000)
    printf("\n\nNumber of attempts exceed one million :\t ACTION TERMINATED!!!");
else
{
    for (i=0; i<10; i++)
    {
        for (j=0; j<10; j++)
            if (i==j&&matrix2[i][j] >= 7)
                printf("%5d",matrix2[i][j]);
    printf("\n\n");
    }
}

2 个答案:

答案 0 :(得分:0)

在第一次尝试时这样做。替换:

matrix2[i][j] = rand()%10;
if(i==j&&matrix2[i][j] >= 7)
    count++;

使用:

matrix2[i][j] = i==j?rand()%3+7:rand()%10;

删除重试循环。

如果您出于某种不可思议的原因想要继续生成和丢弃,请为实际成功的案例添加休息条件!

答案 1 :(得分:0)

简单:) 当尝试达到1000000时,第一个循环将结束:

attempts = 999998; //continue
attempts = 999999; //continue
attempts = 1000000; //stop

然后,您正在检查尝试是否大于或等于1000000,并且它是相等的:)

你应该检查它是否更大:

if (attempts > 1000000)

此致  Kamou