适合这种C模式的数字是多少?

时间:2017-05-16 22:46:49

标签: c loops design-patterns

所以我有这个C函数读取6个数字必须符合某个模式才能成功到达函数的末尾。

void phase() {
    int numbers[6];
    read_six_numbers(numbers);
    if(numbers[0] < 0) explode();
    for(int i=1; i!=6; ++i) {
        int a = i + numbers[i-1];
        if(numbers[i]!=a) explode();
    }
}

让我失望的是循环中的++i。我查看了++ii++之间的差异,并且在迭代数字时似乎并不重要。然而,在没有调用explode()的情况下,我似乎无法找到6个能够到达此函数末尾的数字。

简而言之,++i vs i++在这种情况下是否重要?就像我说的,研究差异,它似乎不应该。虽然当我在纸上解决问题时,我无法成功完成循环,所以我一定做错了什么?或者也许只是过度思考这个问题?

1 个答案:

答案 0 :(得分:4)

在这种情况下,预增量与后增量无关。

这里有一个解决方案(0,1,3,6,10,15):

#include <stdio.h>

void explode(int n) {
    printf("Exploded at %d\n", n);
}

void phase() {
    int numbers[6] = {0, 1, 3, 6, 10, 15};

    if (numbers[0] < 0) explode(0);

    for (int i = 1; i != 6; ++i) {
        int a = i + numbers[i-1];
        if (numbers[i] != a) explode(i);
    }
}

int main(int argc, char *argv[]) {
    phase();
}