首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

藍眼睛島民邏輯題:C/C++ 代碼邏輯正確,C++ 版本可能因輸入循環條件導致 WA

     編輯:程式設計綜合問答

題目邏輯核心

經典藍眼睛謎題數學結論:有 k 個藍眼睛島民,他們會在第 k 天集體離開。黑眼睛島民永遠不離開(輸出 -1)。

代碼邏輯驗證

兩份代碼核心邏輯完全正確:


// 統計藍眼睛數量 k
int k = 0;
for (int i = 0; i < n; i++) if (eyes[i] == 0) k++;

// 輸出
for (int i = 0; i < n; i++) {
    if (eyes[i] == 1) printf("-1 ");  // 黑眼睛
    else printf("%d ", k);            // 藍眼睛輸出 k
}

C++ 版本可能 WA 的真實原因

原貼 C++ 代碼排版混亂、缺失部分,但最可能的邏輯錯誤是輸入循環終止條件:

錯誤示例


int n;
cin >> n;  // 只讀一組數據!
// 題目要求「多組數據」,需循環讀取直到 EOF

正確的多組數據讀取


// C 風格(原 C 代碼正確)
while (scanf("%d", &n) != EOF) { ... }

// C++ 風格
while (cin >> n) {  // 直到 EOF 或讀取失敗
    vector eyes(n);
    for (int i = 0; i < n; i++) cin >> eyes[i];
    // 處理邏輯...
}

其他潛在坑點

問題檢查
輸出格式每組數據單獨一行,數字間單空格,行末無多餘空格
大數據性能n≤10000,O(n)極快,無性能問題
換行符C++ 用 cout << '\n'; 而非 endl(刷新緩衝區慢)
編譯標準確保 -std=c++11 或更高

完整 AC 代碼(C++11)


#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n;
    while (cin >> n) {  // 關鍵:多組數據循環
        vector eyes(n);
        int blueCount = 0;
        for (int i = 0; i < n; i++) {
            cin >> eyes[i];
            if (eyes[i] == 0) blueCount++;
        }
        
        for (int i = 0; i < n; i++) {
            if (i) cout << ' ';
            if (eyes[i] == 1) cout << -1;
            else cout << blueCount;
        }
        cout << '\n';
    }
    return 0;
}

總結

藍眼睛島民題核心邏輯:統計藍眼睛數 k,藍眼睛輸出 k,黑眼睛輸出 -1。C 代碼正確,C++ 版本 WA 多半因缺少多組數據循環讀取(while(cin>>n))或輸出格式問題。補全輸入循環即可 AC。

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