#### 排序
~~~
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;
}
}
~~~
- 前言
- 求和的问题ACM
- A+B问题acm
- 1091ACM求和
- 杭电ACM1092求和问题详解
- ACM杭电的1093求和问题
- 杭电ACM1094计算A+B的问题
- 杭电ACM1095解决A+B问题
- 杭电ACM1096求和问题
- 杭电Acm1001解决求和的问题
- 杭电ACM1008电梯问题C++
- 杭电ACM大赛2000关于ASCII码排序的问题
- 杭电ACM2006奇数的乘积
- 杭电ACM数值统计2008
- 杭电ACM1019求最大公约数
- 杭电ACM1108求最小公倍数
- 杭电ACM2035人见人爱的A^B
- 杭电ACM1061N^N求最右边的数的问题
- 杭电ACM1021裴波纳挈数AGAIN
- 杭电ACm1005求f(n)非递归
- 杭电ACM1071The area---------求积分面积
- 杭电ACM吃糖果问题
- 杭电ACm求数列的和2009
- 杭电ACM多项式求和--》2011
- 杭电ACM。。。sort
- 杭电ACM1004
- 杭电ACM2043密码的问题已经AC
- 杭电ACM2041楼梯问题
- 动态规划C++::杭电ACM1003
- 杭电ACM----2018母牛的故事
- 杭电ACM2007平方和与立方和
- 卢卡斯队列
- 全国软件2. 三人年龄
- 全国软件3. 考察团组成
- 全国软件--微生物增殖
- 全国软件填写算式
- 全国软件-----------猜生日
- 全国软件---------欧拉与鸡蛋
- Java经典算法四十例编程详解+程序实例
- 杭电ACMA + B Problem II问题解析
- 杭电ACM1018BigNumber解析
- 杭电ACM1088 Write a simple HTML Browser Java
- 杭电ACM1106排序Java代码
- 杭电ACM 1012 u Calculate e java
- 杭电ACM 1020 Encoding java解析
- 杭电1047 An Easy Task - java 解读
- 杭电ACM 1040 As Easy As A+B java 解读
- 杭电ACM 1041 Computer Transformation java代码详解AC
- 杭电ACM 1030 Delta-wave java代码解析