#### 排序
~~~
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代碼解析