搜尋

首頁  >  問答  >  主體

在VIJOS上用Java實作演算法出現的問題

【問題】想必有人做過vijos這道題吧?不太清楚本人程序哪裏出現了這樣的問題?另本人還是小白,代碼暴力破解...歡迎願意的大神提供給更優方案哈~

【以下為題目描述】

華華通過以下方式進行分析,首先將比賽每個球的勝負列成一張表,然後分別計算在11分製和21分製下,雙方的比賽結果(截至記錄末尾)。
比賽規則和實際比賽規則相同, 在11分製下比分為10:11時還要繼續比賽,直到分數差距達到2分;同理21分製下比分為20:21的時候也還要繼續比賽。
比如現在有這麼一份記錄,(其中W表示華華獲得一分,L表示華華對手獲得一分):
WWWWWWWWWWWWWWWWWWWWWWLW
在11分製下,此時比賽的結果是華華第一局11比0獲勝,第二局11比0獲勝,正在進行第三局,當前比分1比1。而在21分製下,此時比賽結果是華華第一局21比0獲勝,正在進行第二局,比分2比1。如果一局比賽剛開始,則此時比分為0比0。
你的程序就是要對於一係列比賽信息的輸入(WL形式),輸出正確的結果。
格式

【輸入格式】

每個輸入文件包含若幹行字符串(每行至多20個字母),字符串有大寫的W、L和E組成,也許中間有若幹個空格。其中E表示比賽信息結束,程序應該忽略E之後的所有內容,E後麵可能有幹擾文字。
輸出格式

輸出由兩部分組成,每部分有若幹行,每一行對應一局比賽的比分(按比賽信息輸入順序)。其中第一部分是11分製下的結果,第二部分是21分製下的結果,兩部分之間由一個空行分隔。

【樣例輸入1】

WWWWWWWWWWWWWWWWWWWW
WWLWE

【樣例輸出1】

11:0
11:0
1:1

21:0
2:1
限製

各個測試點1s

【以下為本人代碼】

import java.util.Scanner;


public class Main {
    public static void main(String[] args){
    int i=0;
    int j=0;
    int a=0;
    int b=0;
    int num=0;
    Scanner scanner=new Scanner(System.in);
    String s1=scanner.nextLine();
    String s2=scanner.nextLine();
    String s=s1+s2;
    s=s.replace(" ", "");
    System.out.println(s);
    char[] arr=s.toCharArray();
    
    for(i=0;i<arr.length;i++){
        
        if(arr[i]=='E'){
            break;
        }
        num++;
    }
    
    char[] result=new char[num];
for(i=0;i<num;i++){
        result[i]=arr[i];
        
    }

    for(j=0;j<num;j++){
        if(result[j]=='W')
            {a++;}
        if(result[j]=='L')
            {b++;}
        if(result[j]=='\n')
            {continue;}
        
        if(a==11||b==11&&Math.abs(a-b)>2){
            
            System.out.println(a+":"+b);
            a=0;
            b=0;
            
            
        }
        if(j==num-1){
            
            System.out.println(a+":"+b);
            a=0;
            b=0;
        }
            
        
        
    }
    System.out.println();
    for(i=0;i<num;i++){
        if(result[i]=='W')
            {a++;}
        if(result[i]=='L')
            {b++;}
        if(result[i]=='\n')
            {continue;}
        
        if(a==21||b==21&&Math.abs(a-b)>2){
            
            System.out.println(a+":"+b);
            a=0;
            b=0;
            
            
        }
        if(i==num-1){
            
            System.out.println(a+":"+b);
        }
            
        
        
    }
    
    }
}
PHP中文网PHP中文网2805 天前506

全部回覆(1)我來回復

  • PHP中文网

    PHP中文网2017-04-18 10:58:13

    我不太會java,所以,看不了代碼
    不過,這個是NOIP 2003普及組的一個題目,叫乒乓球,這個題目有沒得什麼演算法,就是你說的暴力,其實就是模擬統計結果就可以了,至於RE,就要檢查下你的數組的越界問題了
    下面這個地址可以下載題目的測試數據,你把測試數據放在本地,一組一組的測試,然後對比結果,哪組有問題就DEBUG哪一組
    http://www.jxteacher.com/ppt/...

    回覆
    0
  • 取消回覆