PAT 1038

题目链接如下:
pat 1038
此题的重点在于 32,321 3214 在排序时应当是 32 3214 321 的顺序,仔细观察发现只需先循环的填充不足8位的数至八位再排序即可得到正确的序列 如该用例中 321->32132132 3214->32143214 32->32323232 如何排序即一目了然
同时要注意最开始的0是不输出的,并且如果输入的全是0则应当输出一个0
此题仍然对于java来说无法ac,有一组超时,但使用c语言则可以ac
代码如下(有一组超时)

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

public class Main {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int flag1=1;
        int flag2=1;
        ArrayList<A> ar=new ArrayList<A>();
        for(int i=0;i<n;i++){
            ar.add(new A(sc.next()));
        }
        Collections.sort(ar);
        for(int i=0;i<ar.size();i++){
            A a=ar.get(i);
            char[] rr=a.s.toCharArray();
            for(int j=0;j<rr.length;j++){
                if(rr[j]=='0'){
                    if(flag1==0){
                        System.out.print(rr[j]);
                    }
                    else
                        continue;       
                }
                else{
                    System.out.print(rr[j]);
                    flag1=0;
                    flag2=0;
                }
            }
        }
        if(flag2==1) System.out.println('0');
        else System.out.println();
    }

}
class A implements Comparable<A>{
    String s;
    A(String s){
        this.s=s;
    }
    @Override
    public int compareTo(A o) {
        String m1=s;
        String m2=o.s;
        int l1=m1.length();
        int l2=m2.length();
        for(int i=0;i<8-l1;i++)
            m1+=s.toCharArray()[i%l1];
        for(int i=0;i<8-l2;i++)
            m2+=o.s.toCharArray()[i%l2];

        return m1.compareTo(m2);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值