杭电ACM1106排序Java代码
最后更新于:2022-04-01 09:48:35
#### 排序
~~~
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 43680 Accepted Submission(s): 12476
~~~
Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
Sample Input
~~~
0051231232050775
~~~
Sample Output
0 77 12312320
该题看起来简单,但是实际上则没那么简单,给出的测试用例只是普通的情况,有很多情况并没有给你列出来,比如5551、255、1552等等的情况我思路是先去掉头部和尾部的5,然后将字符串中间的临近的几个5合并为1个5那么这样再通过字符串的切割即可以保证切割出来的数组中不存在空的情况,这样也就保证了转为整形时候的正确性,然后再对数组进行排序就可以了
~~~
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = "";
int indexStart = -1;
int indexEnd = -1;
int count = 0;
while(scanner.hasNext())
{
str = scanner.nextLine();
if(str != "" && str.trim().length() > 0)
{
while(str.charAt(0) == '5'|| str.charAt(str.length()-1) == '5')
{
if(str.charAt(0) == '5')
str = str.substring(1, str.length());
if(str.charAt(str.length()-1) == '5')
str = str.substring(0, str.length()-1);
}
// System.out.println(str);
int i = 0;
boolean bool = false;
while(i < str.length() )
{
if(str.charAt(i) == '5' && count == 0)
{
indexStart = i;
}
if(str.charAt(i) == '5')
{
count++;
indexEnd = i;
}
if(str.charAt(i) != '5')
{
if(count > 1 && indexStart != -1 && indexEnd != -1)
{
if(indexEnd < str.length() && indexStart > 0)
str = str.subSequence(0, indexStart) +""+ str.subSequence(indexEnd, str.length());
else if(indexEnd == str.length())
str = str.subSequence(0, indexStart) + "";
else if(indexStart == 0 && indexEnd < str.length())
str = str.subSequence(indexEnd, str.length()) + "";
bool = true;
}
count = 0;
indexStart = -1;
indexEnd = -1;
}
if(bool)
{
i = 0;
bool = false;
}
else
{
i++;
}
}
// System.out.println(str);
String[] numStr = str.split("5");
int[] nums = new int[numStr.length];
for(i =0; i < numStr.length; i++)
{
if(numStr[i] != "")
nums[i] = Integer.parseInt(numStr[i]);
}
nums = sort(nums);
for(int m =0; m < nums.length; m++)
{
if(m != 0)
System.out.print(" " + nums[m]);
else
System.out.print(nums[m]);
}
System.out.println();
}
}
}
private static int[] sort(int[] nums) {
// TODO Auto-generated method stub
for(int j = 0; j < nums.length - 1; j++)
{
for(int k = j + 1; k < nums.length; k++)
{
if(nums[j] > nums[k])
{
int temp = nums[j];
nums[j] = nums[k];
nums[k] = temp;
}
}
}
return nums;
}
}
~~~