Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByte
Total Submit:1243 Accepted:242
Total Submit:1243 Accepted:242
Description
有一些A、C、M组成的字符串,将其按字符A排序。
Input
一组测试数据,输入数据由若干行组成,每行是字符A、C或M组成的字符串。
Output
对所有输入的数据,先按字符A的个数进行升序排序,如果字符A的数量相等,再按出现的先后顺序排序,每行输出一个字符串。
Sample Input
ACM
MCA
AACAAMMM
AACCMM
CMAAMMMMMM
AAA
Sample Output
ACM
MCA
AACCMM
CMAAMMMMMM
AAA
AACAAMMM
Source
NUPT
题目的关键在于弄清顺序: 按照A的多少排序,如果A的个数相同,按照出现顺序。所以只需要A的交换个数多的字符串到比较后的位置即可。
另外这种不知道输入多少结束的题目,我认为实际上是EOF型。结束输入的话,在windows下应该对应 ctrl+Z ,linux下应该是ctrl+D或者ctrl+C.
附上我的源码
package NOJ1023;
import java.util.Scanner;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner sc=new Scanner(System.in);
StringBuffer sb=new StringBuffer("");
while(sc.hasNext()){
sb.append(sc.nextLine().trim()+"@");
}
int count1=0,count2=0;
String temp[]=sb.toString().split("@");
// System.out.println(temp.length);
String t=null;
for(int i=0;i<temp.length-2;i++){
for(int j=0;j<temp.length-1-i;j++){
// System.out.println(temp[j]+" VS "+temp[j+1]);
count1=0; count2=0;
for(int k=0;k<temp[j].length();k++){
if(temp[j].charAt(k)=='A')count1++;
}
for(int k=0;k<temp[j+1].length();k++){
if(temp[j+1].charAt(k)=='A')count2++;
}
// System.out.println(count1+" v "+count2);
if(count1>count2){
t=temp[j];
temp[j]=temp[j+1];
temp[j+1]=t;
// System.out.println("exchange!");
}
}
}
//output
for(int i=0;i<temp.length;i++) System.out.println(temp[i]);
}
}
Accepted
|
125
MS
|
581
K
|
1410Byte
|
2014-08-27 10:47:03.0
|