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

題目 1126:打印極值點下標

     編輯:關於C++

題目大意

給定整數數組,若某元素嚴格大於其相鄰元素,或嚴格小於其相鄰元素,則稱該位置為極值點。輸出所有極值點的下標(從 0 開始)。多組測試數據。

邊界處理

  • 首元素(下標 0):只與下標 1 比較,若不相等則為極值點。
  • 尾元素(下標 k-1):只與下標 k-2 比較,若不相等則為極值點。
  • 中間元素:需同時大於兩側或同時小於兩側。

代碼實現

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    while (cin >> n) {
        while (n--) {
            int k; cin >> k;
            vector a(k);
            for (int i = 0; i < k; i++) cin >> a[i];
            vector peaks;
            if (k == 1) { peaks.push_back(0); } // 單元素視為極值點
            else {
                if (a[0] != a[1]) peaks.push_back(0);
                for (int i = 1; i < k-1; i++) {
                    if ((a[i] > a[i-1] && a[i] > a[i+1]) ||
                        (a[i] < a[i-1] && a[i] < a[i+1]))
                        peaks.push_back(i);
                }
                if (a[k-1] != a[k-2]) peaks.push_back(k-1);
            }
            for (size_t i = 0; i < peaks.size(); i++) {
                if (i) cout << ' ';
                cout << peaks[i];
            }
            cout << '\n';
        }
    }
    return 0;
}

注意點

  • 輸入格式:第一行 n(數組個數),之後每組兩行:k 和 k 個整數。
  • 輸出格式:每組一行,下標用空格分隔,行末無多餘空格。
  • 樣例輸出中首行有 "0 7",說明首尾判斷邏輯正確。
  • 若相等則不視為極值點(嚴格大於/小於)。

總結

簡單模擬題,關鍵在於正確處理首尾邊界與相等情況。用 vector 存儲結果最後統一輸出可避免格式錯誤(PE)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved