首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

OJ題解:元素刪除 - 面試隊列離隊模擬

     編輯:關於C語言

題目情境

原隊列 M 人編號序列,DavidDeng 拿著編號 N 離隊。刪除該編號,輸出新序列。

演算法:陣列前移覆蓋

  1. 讀入序列 a[0..M-1]
  2. 掃描找到目標值索引 idx
  3. 從 idx 開始前移:for(i=idx; i
  4. 輸出 a[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 ✓
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved