题意:字符串剪切,然后排序。
/**
* bug遇险记
* 1)输入5512程序会挂
* 2)输入1255程序会挂
* 3)异或运算处于矛盾中
*/
import java.util.Scanner;
public class p1106 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 输入字符串地长度不大于1000
int[] array = new int[1000];
while (sc.hasNext()) {
String aLine = sc.next();
// bug1)去掉前面的5
for (int i = 0; i < aLine.length(); i++) {
char ch = aLine.charAt(i);
if (ch != '5') {
// 防止超内存
StringBuffer sb = new StringBuffer();
for (int j = i; j < aLine.length(); j++) {
sb.append(aLine.charAt(j));
}
aLine = sb.toString();
break;
}
}
// bug2)"+"表示重复一次或更多次
String[] mat = aLine.split("5+");
int number = mat.length;
for (int i = 0; i < number; i++) {
array[i] = Integer.parseInt(mat[i]);
}
sort(array, number);
for (int i = 0; i < number; i++) {
if (i == 0) {
System.out.print(array[i]);
} else {
System.out.print(" " + array[i]);
}
}
System.out.println();
}
}
public static void sort(int[] mat, int number) {
for (int i = 0; i < number - 1; i++) {
for (int j = i + 1; j < number; j++) {
// 升序
if (mat[i] > mat[j]) {
mat[i] = mat[i] ^ mat[j];
mat[j] = mat[i] ^ mat[j];
<span style="white-space:pre"> </span>mat[i] = mat[i] ^ mat[j];
//int temp = mat[i];
//mat[i] = mat[j];
//mat[j] = temp;
}
}
}
}
}
排序
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 41915 Accepted Submission(s): 12018
Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
Sample Input
0051231232050775
Sample Output
0 77 12312320
Source