2016-07-13 71 views
-1

我是一名編碼初學者。我開始練習SPOJ的基本問題。 This是我試圖解決的問題,但代碼不正確。半字符串每秒字符

請幫助我,我已經編寫了這個問題錯了,因爲我無法弄清楚:

public class Print2ndChar { 
public static void main(String[] args) throws java.lang.Exception { 
    Print2ndChar mainObj = new Print2ndChar(); 

    java.io.BufferedReader inputReader = new java.io.BufferedReader(new java.io.InputStreamReader(System.in)); 
    String noOfTestCase; 
    if(((noOfTestCase = inputReader.readLine()) == null)) 
     System.exit(0); 
    int noOfLines = 0; 

    try{ 
     noOfLines = Integer.parseInt(noOfTestCase); 
    }catch(Exception e){ 
     System.exit(0); 
    } 
    if(noOfLines<0 || noOfLines>100) 
     System.exit(0); 

    String [] randomWords = new String[noOfLines]; 
    for(int i=0;i<noOfLines;i++){ 
     randomWords[i] = inputReader.readLine(); 
     if(randomWords[i] == null || randomWords[i].length()<2 || randomWords[i].length()%2!=0 || (randomWords[i].length()/2)>100) 
      System.exit(0); 
    } 
    for (String word : randomWords){ 
     mainObj.letsBegin(word.substring(0, word.length()/2)); 
     System.out.println(); 
    } 
} 

private void letsBegin(String data) { 

    if (data.length() <= 0) { 
     return; 
    } else { 
     System.out.print(data.charAt(0)); 
     if (data.length() >= 3) 
      letsBegin(data.substring(2, data.length())); 
    } 
} 
} 

編輯:

I/P:4個 你 進步 是 明顯

O/P y po i ntc

+0

你能解釋一下你的問題到底是什麼嗎? – user3765370

+0

@ user3765370答案對於這個問題是不正確的。可能會出現一些消極的情況,從編碼中被錯過了。我無法弄清楚這個解決方案不正確的地方。 – xyz

+0

你能提供什麼是你的輸入設置和什麼是你的輸出。 – user3765370

回答

1

OK!所以在經過大量的測試和試用之後,我知道你的代碼有什麼問題。你寫的代碼失敗的,因爲你的if中的條件randomWords[i].length()%2!=0。沒有什麼錯,你把這個條件檢查輸入,但如果你將選擇樣本的測試情況下,突出藍色區域裏面,你會發現每串後額外的空間。就像這樣:

enter image description here

你可以看到比上一次輸入所有其它輸入的字符串必須在後面加上一個空格字符等。所以,當你從stdin讀取字符串字符串的長度爲2*k + 1(因爲空間的),你的程序將退出沒有任何輸出。因此你得到了一個錯誤的答案。

這個問題也可能存在於其他測試用例中。我怎麼知道這個?之後SPOJ表明您錯誤的答案,如果你點擊錯誤的答案,它會告訴你2測試失敗的情況下,這樣的事情:

enter image description here 它顯示了你的程序的輸出是空的,因爲你的代碼退出,因爲字符串末尾的額外空間。 所以,我相信誰寫的測試用例的人應給予WT錯誤(錯誤的測試用例):P:d

因此,可能的修正是你從if刪除提到的情況,你會得到AC。因爲現在你將2*k + 1除以2,它不會是一個整數,並且它將四捨五入到最接近的最小整數,這與將2*k除以2並且程序將給出正確的結果相同。

在解決關於spoj的問題時,您應該注意幾件事情,您不必驗證每個輸入是否位於問題指定的範圍內,或者它是否是有效的數據類型。給出的範圍告訴你,Spoj只會測試你的程序,在這些範圍之間的案件不會超過它們。因此,即使您刪除了檢查輸入數據的異常和範圍的所有代碼,您也會得到一個AC。而且,編寫這樣的代碼只會增加負擔。

希望這會有所幫助。 :)

+0

Tysm :)會立即嘗試。 – xyz

+0

也感謝告訴我關於失敗它的測試案例。這將是簡單的測試和修復現在:) – xyz

+0

@xyz嗯,我不認爲spoj通常共享失敗的測試用例的細節,它只是爲了這個問題,或者其他一些問題。 – user007