我經歷了以下代碼:
#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 是一個靜態 int 陣列,我想知道 "i = qu[cnt--, head ]" 行的作用,我們如何將兩個引數傳遞給陣列的索引。
uj5u.com熱心網友回復:
在下標運算子中使用了帶有逗號運算子的運算式。
qu[cnt--, head ],
運算式的結果是第二個運算元的值。
來自 C 標準(6.5.17 逗號運算子)
2 逗號運算子的左運算元被評估為 void 運算式;在它的求值和右運算元的求值之間有一個序列點。然后對右運算元求值;結果有它的型別和值。
在我看來,這是一種糟糕的編程風格,只會讓代碼的讀者感到困惑,因為不清楚是否存在拼寫錯誤,而不是逗號,應該有例如 類似于
qu[cnt-- head ] . qu[head cnt ]也許確實有錯別字。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/413825.html
標籤:
上一篇:MongoDB$lookup用用戶檔案替換物件中的user_id欄位(物件將在物件陣列中)
下一篇:如何在陣列內搜索過濾器陣列項
