原隊列 M 人編號序列,DavidDeng 拿著編號 N 離隊。刪除該編號,輸出新序列。
a[0..M-1]idxidx 開始前移:for(i=idx; ia[0..M-2] (新長度 M-1)#include <stdio.h>
int main() {
int T, M, N, a[10001];
scanf("%d", &T);
while (T--) {
scanf("%d", &M);
for (int i = 0; i < M; i++) scanf("%d", &a[i]);
scanf("%d", &N);
int idx = -1;
for (int i = 0; i < M; i++)
if (a[i] == N) { idx = i; break; }
if (idx != -1) {
for (int i = idx; i < M-1; i++) a[i] = a[i+1];
M--;
}
for (int i = 0; i < M; i++) {
printf("%d", a[i]);
if (i < M-1) printf(" ");
}
if (T) printf("\n");
}
return 0;
}
i<M-1 配合內層搬移,導致漏檢最後一個元素break,繼續掃描搬移造成錯誤i<M-2 空格判斷易出錯[idx, M-2] 覆蓋至倒數第二個M-- 統一管理,輸出邏輯簡潔輸入: M=4, 1 3 8 2, N=3 idx=1 搬移: a[1]=8, a[2]=2 結果: 1 8 2 ✓