比赛描写叙述:
将01串首先按长度排序。长度同样时。按1的个数多少进行排序,1的个数同样时再按ASCII码值排序。
输入:
输入数据中含有一些01串,01串的长度不大于256个字符。
输出:
又一次排列01串的顺序。使得串按基本描写叙述的方式排序。
例子输入:
10011111
00001101
1010101
1
0
1100
例子输出:
0
1
1100
1010101
00001101
10011111
被AC的代码例如以下:
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] str = new String[256]; int i=0; while(sc.hasNextLine()) { String inStr = sc.nextLine(); if(inStr.equals("")) { break; } str[i++]=inStr; } for(int j=0;j<i;j++) { for(int y=0;y<i-j-1;y++) { if(cmpStr(str[y],str[y+1])==1) { String temp = str[y+1]; str[y+1] = str[y]; str[y] = temp; } } } for(int j=0;j<i;j++) { System.out.println(str[j]); } } private static int cmpStr(String s,String t) { if(s.length()<t.length()) { return -1; } if(s.length()>t.length()) { return 1; } if(s.length()==t.length()) { if(NumOfOne(s)<NumOfOne(t)) { return -1; }else if(NumOfOne(s)>NumOfOne(t)) { return 1; }else { for(int m=0;m<s.length();m++) { if(s.charAt(m)>t.charAt(m)) { return 1; }else if(s.charAt(m)<t.charAt(m)) { return -1; }else { return 0; } } } } return 0; } private static int NumOfOne(String s) { if(s==null||s.length()==0) { return 0; } int sum=0; for(int i=0;i<s.length();i++) { if(s.charAt(i)=='1') { sum++; } } return sum; } }