T 組測試資料。M(隊伍人數)→ M 個編號 → N(DavidDeng 編號)。N 的元素,輸出剩餘序列,編號間以單一空格分隔。N ≤ 10000。#include <stdio.h>
int main(void)
{
int T;
if (scanf("%d", &T) != 1) return 0;
while (T--) {
int M;
scanf("%d", &M);
int id[10000];
for (int i = 0; i < M; i++)
scanf("%d", &id[i]);
int N;
scanf("%d", &N);
// 找到 N 的位置並前移後續元素
int pos = -1;
for (int i = 0; i < M; i++) {
if (id[i] == N) { pos = i; break; }
}
if (pos != -1) {
for (int i = pos; i < M - 1; i++)
id[i] = id[i + 1];
M--; // 有效長度減 1
}
// 輸出,注意格式:元素間單一空格,行尾無多餘空格
for (int i = 0; i < M; i++) {
if (i) putchar(' ');
printf("%d", id[i]);
}
if (T > 0) putchar('\n'); // 非最後一組換行
}
return 0;
}
pos,將 pos+1..M-1 依序前移一格,時間 O(M),空間 O(1) 額外空間。scanf("%d") 自動跳過空白,直接讀入陣列。N 保證存在,但防禦性程式仍檢查 pos != -1。若不需修改陣列(後續無操作),可直接輸出時略過 N:
int first = 1;
for (int i = 0; i < M; i++) {
if (id[i] == N) continue;
if (!first) putchar(' ');
printf("%d", id[i]);
first = 0;
}
更簡潔,避免陣列移動開銷。
輸入:
1
4
1 3 8 2
3
輸出:
1 8 2
gets/fgets 讀編號行 → 需自行分割字串,scanf 更簡單。M 最大未給,建議開 10000 或動態分配。