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 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();
            //初始化位置
            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;iint 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下一题吧)

你可能感兴趣的:(算法)