for
循环的第二次迭代总是跳过第一次迭代。在调试模式下,它以i=1
开头,但只要它计算if子句i=2
,其余部分就会很好。它几乎就像是隐藏continue
。
int n, k, i, j = 0;
int *key;
int x = 0;
int y = 0;
scanf ("%d%d", &n, &k);
key = malloc (n * sizeof (int));
for (i = 0; i < n; i++) {
scanf("%d", &key[i]);
}
for (i = 1; i <= n; i++) {
if (key[j % n] == i) {
x++;
} else {
y++;
j++;
}
}
这种方式的代码完美无缺:
while (1) {
for (i = 1; i <= n; i++) {
while (1) {
if (x == k) {
printf("%d",y);
return 0;
} else if (!(key[j % n] - i)) {
x++;
break;
} else {
y++;
j++;
}
}
}
}