去“5”排序

韓小妹發表於2018-08-08

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

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

Input

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

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

Output

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

Sample Input

0051231232050775

Sample Output

0 77 12312320

利用 C++ stringstream 轉換輸入流為字串,達到自動分割數字的目的 

AC碼:

#include<cstring>
#include<sstream>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1000;
int a[maxn];
int main()
{
	string str;
	while(cin>>str)
	{
		for(int i=0;i<str.length() ;i++)
		{
			if(str[i]=='5')
			str[i]=' ';
		}
		int n=0,x;
		stringstream ss(str);
		while(ss>>x)
		a[n++]=x;
		sort(a,a+n);
		for(int i=0;i<n-1;i++)
		cout<<a[i]<<" ";
		cout<<a[n-1]<<endl;
	}
	return 0;
}

還有一種:

#include <algorithm>
using namespace std;

string str;
int num[1010]; //記錄下字串中的數字 

int main() {
//	freopen( "in.txt","r",stdin );
	int sum,len,i;
	while( cin >> str ) {
		i = len = sum = 0;
		//去前導'5' 
		while( str[i]=='5' )
			i++;
		for( ; i<str.length() ; i++ ) {
			if( str[i]=='5' ) {
				//當兩個5是連續時,num=0,此時num不記錄 
				if( str[i-1]!='5' ) {
					num[len++] = sum;
					sum = 0;
				}
				continue;
			} 
			sum = sum * 10 + str[i] - '0';
		}
		//如果末尾不為'5',則加入num,因為迴圈中是逢'5'新增num 
		if( str[str.length()-1]!='5' ) {
			num[len++] = sum;
		}
		sort( num,num+len );
		for( i=0 ; i<len-1 ; i++ )
			cout << num[i] << " ";
		cout << num[len-1] << endl;
	}
}

 

相關文章