Hdu 的一道水題 排序(hdu 1.3.6)

排序(hdu 1.3.6)

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 5799 Accepted Submission(s): 1664

Problem Description
輸入一行數字,如果我們把這行數字中的‘5’都看成空格,那麼就得到一行用空格分割的若干非負整數(可能有些整數以‘0’開頭,這些頭部的‘0’應該被忽略掉,除非這個整數就是由若干個‘0’組成的,這時這個整數就是0)。

你的任務是:對這些分割得到的整數,依從小到大的順序排序輸出。

Input
輸入包含多組測試用例,每組輸入數據只有一行數字(數字之間沒有空格),這行數字的長度不大於1000。

輸入數據保證:分割得到的非負整數不會大於100000000;輸入數據不可能全由‘5’組成。

Output
對於每個測試用例,輸出分割得到的整數排序的結果,相鄰的兩個整數之間用一個空格分開,每組輸出佔一行。

Sample Input
0051231232050775

Sample Output
0 77 12312320

這是杭電的一道基礎水題,其實看起還是比較簡單的,就是將5作爲分隔符號對字符串進行劃分,對取得的Integer整數進行排序輸出,考慮的情況無非就是以下幾種

1、開頭是5,結尾是5
2、開頭是5,結尾不是5
3、開頭不是5,結尾是5
4、開頭不是5,結尾也不是5
其實也是很簡單的操作,我想的用c語言的操作實現(雖然我用的是java,但我放棄了使用java的STL,轉而想用c語言的方式去思考這個問題),很快我就寫出了下面的代碼

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/** * * @author chaplinJ * */
public class Main5{


    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);
        String st;
        char[] chars;
        int[] location;
        List<Integer> list;;
        int count = 0;
        String values;
        while(sc.hasNext()){
            st = sc.next();
            chars = st.toCharArray();
            location = new int[chars.length+1]; //記錄位置數組
            count=0;
            list = new ArrayList<Integer>();
            //初始化位置
            for(int i = 0 ; i < chars.length+1;i++){
                location[i] = -1;
            }
            for(int i = 0 ; i < chars.length;i++){

                if(chars[i] == '5'){
                    location[count++] = i; //記錄位置
                }

            }
            if(location[0] != -1){ //判斷是否包含5分隔符號
                if(chars[0] != 5){//判斷5是否出現在第一個位置
                    values = String.valueOf(chars, 0, (location[0]));
                    if(!"".equals(values)){
                        list.add(Integer.parseInt(values));
                    }
                }
                for(int i = 0 ; i < location.length - 1 && location[i] != -1;i++){

                    if( location[i] + 1 <= location[i+1] - 1){ //兩個5不相鄰
                        values = String.valueOf(chars, location[i] + 1, (location[i+1] - location[i] - 1));
// System.out.print((location[i] + 1) + " " + (location[i+1] - 1));
                        if(!"".equals(values)){
                            list.add(Integer.parseInt(values));
                        }
                    }
                }
                if(location[count - 1] != chars.length -1){ //判斷5是否出現在最後一個位置
                    values = String.valueOf(chars, location[count - 1] + 1, chars.length - location[count - 1] - 1);
// System.out.print((location[i] + 1) + " " + (location[i+1] - 1));
                    if(!"".equals(values)){
                        list.add(Integer.parseInt(values));
                    }
                }
            }
            Collections.sort(list);
// for(int i = 0 ; i < list.size();i++){
// System.out.print(list.get(i)+" ");
// }
            for(int i=0;i<list.size();i++)  
            {  
                int a = list.get(i);
                System.out.print(a);  
                if(i!=list.size()-1)  
                    System.out.print(" ");  
                else  
                    System.out.println();  
            }  
        }

    }

}

感覺很開心,hdu OJ去提交,結果出現了WA,沒錯就是WA!!!!! 真的是不可思議啊!我改過來改過去,依然是WA!,自己想到的情況在自己的電腦能夠AC過,但hdu OJ總是WA ,就這樣糾結了一下午,至少提交了6次!!,WA依舊,,,,,硬撐着我到了其它OJ平臺,也通不過,最後到了牛客上去測試,竟然過了!,天啦嚕!,現在我也沒想明白,這也是我爲什麼爲這道水題寫這篇文章的原因。

不過就不過吧!我還是隨隨java的類庫,大衆化一點!,循環去掉頭部的’5’,最後採用通用的正則表達式分割!最終有了以下的代碼(這也是我百思不得其姐沒辦法的情況下。。。。)

package acm.hdu.edu.cn;

import java.util.Arrays;
import java.util.Scanner;

/** *1.3.6 * @author chaplinJ * */
public class Main5{


    public static void main(String[] args){

        Scanner sc = new Scanner(System.in);
        String st;
        String[] values;
        int[] vas;
        while(sc.hasNext()){
            st = sc.next();
            while(true){
                if(st.charAt(0) == '5'){
                    st = st.substring(1);
                }else{
                    break;
                }
            }
            values = st.split("5+");
            vas = new int[values.length];
            for(int i = 0 ; i < values.length;i++){
                vas[i] = Integer.parseInt(values[i]);
            }
            Arrays.sort(vas);

            for(int i = 0 ; i < vas.length;i++){
                System.out.print(vas[i]);
                if( i!= vas.length - 1){
                    System.out.print(" ");
                }else
                    System.out.println();
            }
        }

    }

}



以此紀念我的六次 WA!

(懵逼,還是不知道哪裏有問題,頭疼,先放一放,,,繼續AC下一題吧)

点赞