if (r = 1) break; // ① 應為 ==
if (r = 0) cout << "Yes"; // ② 應為 ==
r = 1 是賦值,值為 1 (true) → 條件恒成立 → break → 後續邏輯不執行。r = 0 值為 0 (false) → 恒輸出 No。
bool isValidPopOrder(const vector& pop) {
stack st;
int pushIdx = 1; // 1~10 入棧
for (int val : pop) {
while (st.empty() || st.top() != val) {
if (pushIdx > 10) return false; // 入棧耗盡仍不匹配
st.push(pushIdx++);
}
st.pop(); // 匹配,出棧
}
return true;
}
int main() {
int T; cin >> T;
while (T--) {
vector pop(10);
for (int i = 0; i < 10; ++i) cin >> pop[i];
cout << (isValidPopOrder(pop) ? "Yes" : "No") << '\n';
}
}
| 輸入序列 | 輸出 | 說明 |
|---|---|---|
| 1 2 3 4 5 6 7 8 9 10 | Yes | 順序入棧順序出棧 |
| 10 9 8 7 6 5 4 3 2 1 | Yes | 全入棧後逆序出棧 |
| 3 1 2 4 5 6 7 8 9 10 | No | 3 入棧後,1 在棧底無法先出 |
| 2 1 4 3 6 5 8 7 10 9 | Yes | 成對交換,合法 |
**
=vs==是 C/C++ 經典坑**。編譯器開啟-Wparentheses(GCC) //Wall(MSVC) 會警告「assignment used as truth value」。養成「常量在左if (1 == r)」習慣可編譯期攔截。