所以我有一个程序,它运行在0000000000和zzzzzzzz之间的所有可能的字母数字组合中。目前我正在使用以下代码:

for (digit[0] = 0; digit[0] < 36; digit[0]++)
    for (digit[1] = 0; digit[1] < 36; digit[1]++)
        for (digit[2] = 0; digit[2] < 36; digit[2]++)
            // etc...

…最终有10个嵌套for循环,我的整个编辑器屏幕都被填满了。那么我该如何将其压缩为一个或两个for循环呢?我不知道如何把它们放在一起测试和递增。提前感谢所有有这个解决方案的人。我敢打赌这上面有一百万个网页,但我想不出如何在谷歌搜索中表达出来。

最佳答案

使用里程表算法。增加最后一个数字。当它达到最大值时,将其包装回0并在剩余的数字上递归,直到用完数字为止。

int increment_digit(int array[], unsigned int index, limit) {
    if (index == -1) { // We've wrapped around the entire set
        return 0;
    }
    array[index]++;
    if (array[index] == limit) {
        array[index] = 0;
        return increment_digit(array, index-1, limit);
    } else {
        return 1;
}

int main(int argc, char **argv) {
    int digits[SIZE] = {0};
    while (1) {
        // do stuff ...
        if (!increment_digit(digits, SIZE-1, 36))
            break;
        }
    }
    return 0;
}

关于c - 如何缩短循环时间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39906134/

10-11 21:19