c中数组索引的多个参数
Multiple arguments to the index of the array in c
我完成了以下代码:
#include <stdio.h>
#define N 10000000
int main() {
static int rot[N], dd[N], qu[N];
int a, t, i, j, p, head, cnt;
scanf("%d%d", &a, &t);
for (i = 0, p = 1; i < N; i++) {
while (p * 10 <= i)
p *= 10;
rot[i] = i % 10 == 0 ? -1 : (i % 10) * p + i / 10;
}
for (i = 0; i < N; i++)
dd[i] = N;
head = cnt = 0;
dd[1] = 0, qu[head + cnt++] = 1;
while (cnt) {
int d;
i = qu[cnt--, head++], d = dd[i] + 1;
if (i == t) {
printf("%d\n", dd[i]);
return 0;
}
if ((long long) i * a < N) {
j = i * a;
if (dd[j] > d)
dd[j] = d, qu[head + cnt++] = j;
}
if (rot[i] != -1) {
j = rot[i];
if (dd[j] > d)
dd[j] = d, qu[head + cnt++] = j;
}
}
printf("-1\n");
return 0;
}
可以看出,qu是一个static int数组,我想知道"i = qu[cnt--, head++],"行是做什么的,我们如何将两个参数传递给数组的索引。
在下标运算符中使用了带逗号运算符的表达式。
qu[cnt--, head++],
表达式的结果是第二个操作数的值。
来自 C 标准(6.5.17 逗号运算符)
2 The left operand of a comma operator is evaluated as a void
expression; there is a sequence point between its evaluation and that
of the right operand. Then the right operand is evaluated; the result
has its type and value.
在我看来,这是一种糟糕的编程风格,只会让代码的读者感到困惑,因为不清楚是否存在拼写错误,应该使用运算符 +
来代替逗号,例如
qu[cnt-- + head++]
类似于 qu[head + cnt++]
。可能确实有错别字
我完成了以下代码:
#include <stdio.h>
#define N 10000000
int main() {
static int rot[N], dd[N], qu[N];
int a, t, i, j, p, head, cnt;
scanf("%d%d", &a, &t);
for (i = 0, p = 1; i < N; i++) {
while (p * 10 <= i)
p *= 10;
rot[i] = i % 10 == 0 ? -1 : (i % 10) * p + i / 10;
}
for (i = 0; i < N; i++)
dd[i] = N;
head = cnt = 0;
dd[1] = 0, qu[head + cnt++] = 1;
while (cnt) {
int d;
i = qu[cnt--, head++], d = dd[i] + 1;
if (i == t) {
printf("%d\n", dd[i]);
return 0;
}
if ((long long) i * a < N) {
j = i * a;
if (dd[j] > d)
dd[j] = d, qu[head + cnt++] = j;
}
if (rot[i] != -1) {
j = rot[i];
if (dd[j] > d)
dd[j] = d, qu[head + cnt++] = j;
}
}
printf("-1\n");
return 0;
}
可以看出,qu是一个static int数组,我想知道"i = qu[cnt--, head++],"行是做什么的,我们如何将两个参数传递给数组的索引。
在下标运算符中使用了带逗号运算符的表达式。
qu[cnt--, head++],
表达式的结果是第二个操作数的值。
来自 C 标准(6.5.17 逗号运算符)
2 The left operand of a comma operator is evaluated as a void expression; there is a sequence point between its evaluation and that of the right operand. Then the right operand is evaluated; the result has its type and value.
在我看来,这是一种糟糕的编程风格,只会让代码的读者感到困惑,因为不清楚是否存在拼写错误,应该使用运算符 +
来代替逗号,例如
qu[cnt-- + head++]
类似于 qu[head + cnt++]
。可能确实有错别字