所以我有这个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
。我查看了++i
与i++
之间的差异,并且在迭代数字时似乎并不重要。然而,在没有调用explode()
的情况下,我似乎无法找到6个能够到达此函数末尾的数字。
简而言之,++i
vs i++
在这种情况下是否重要?就像我说的,研究差异,它似乎不应该。虽然当我在纸上解决问题时,我无法成功完成循环,所以我一定做错了什么?或者也许只是过度思考这个问题?
答案 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();
}