排序(1106)

*輸入一行數字,如果我們把這行數字中的‘5’都看成空格,那麼就得到一行用空格分割的若干非負整數(可能有些整數以‘0’開頭,這些頭部的‘0’應該被忽略掉,除非這個整數就是由若干個‘0’組成的,這時這個整數就是0)。

你的任務是:對這些分割得到的整數,依從小到大的順序排序輸出。

 

Input
輸入包含多組測試用例,每組輸入數據只有一行數字(數字之間沒有空格),這行數字的長度不大於1000。  

輸入數據保證:分割得到的非負整數不會大於100000000;輸入數據不可能全由‘5’組成。
 

Output
對於每個測試用例,輸出分割得到的整數排序的結果,相鄰的兩個整數之間用一個空格分開,每組輸出佔一行。
 

Sample Input
0051231232050775
 

Sample Output
0 77 12312320
方法一:直接處理
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <iostream>
#include <algorithm>
#include <stack>
#include <set>
#include <map>
#include <string>
using namespace std;
#define pi acos(-1,0)
#define INF 2147483647
int max(int a,int b)
{
	return a>=b?a:b;
} 
int main()
{
	char s[1050];
	int ss[1050];
	int i,j,l,sum,c;
	while(scanf("%s",s)!=EOF)
	{
		l=strlen(s);
		sum=0;
		c=0;
		memset(ss,0,sizeof(ss));
		for(i=0;i<l;i++)
		{
			if(s[i]=='5')
			{	
				if(s[i-1]!='5' && i!=0)	   //第一個是5會多加0,要加判斷,還有前一個是5也會		
				ss[c++]=sum;
			
				sum=0;
			}
			else
			sum=sum*10+s[i]-'0';
		}
		if(s[l-1]!='5')            //最後一個不是5 就要加入 
		ss[c++]=sum; 
		sort(ss,ss+c);
		for(i=0;i<c;i++)
		{
			if(i==0)
			printf("%d",ss[i]);
			else
			printf(" %d",ss[i]);
			
		}
		printf("\n");
	}	
	
	return 0;
}

方法二:strtok,atoi
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <iostream>
#include <algorithm>
#include <stack>
#include <set>
#include <map>
#include <string>
using namespace std;
#define pi acos(-1,0)
#define INF 2147483647
int max(int a,int b)
{
	return a>=b?a:b;
} 
int main()
{
	int n,i,c;
	int b[1050];
	char a[1050],*p;
 	while(scanf("%s",a)!=EOF)
 	{
 		c=0;
 		p=strtok(a,"5");
 		while(p!=NULL)
 		{
		 	b[c++]=atoi(p);
		 	p=strtok(NULL,"5");
	 	}
	 	sort(b,b+c);
 	
	 	printf("%d",b[0]);
	 	for(i=1;i<c;i++)
	  	printf(" %d",b[i]);
	  	printf("\n");
	}
 			
	return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章