標籤:hdu input 任務 pac cin font 這一 就是 print
題目連結:https://vjudge.net/problem/HDU-1106
題目大意:
輸入一行數字,如果我們把這行數字中的‘5’都看成空格,那麼就得到一行用空格分割的若干非負整數(可能有些整數以‘0’開頭,這些頭部的‘0’應該被忽略掉,除非這個整數就是由若干個‘0’組成的,這時這個整數就是0)。
你的任務是:對這些分割得到的整數,依從小到大的順序排序輸出。
Input
輸入包含多組測試案例,每組輸入資料只有一行數字(數字之間沒有空格),這行數位長度不大於1000。
輸入資料保證:分割得到的非負整數不會大於100000000;輸入資料不可能全由‘5’組成。
Output
對於每個測試案例,輸出分割得到的整數排序的結果,相鄰的兩個整數之間用一個空格分開,每組輸出佔一行。
Sample Input
0051231232050775
Sample Output
0 77 12312320
解題分析:
這道題很基礎,主要是懂得如何運用istringstream 字串流輸入,它能夠將帶有空格的string轉化為很多獨立的string。
#include <cstdio>#include <string>#include <cstring>#include <algorithm>#include <iostream>#include <sstream> // istringstream標頭檔using namespace std;int ans[1100];int deal(string a) //將這一段字串轉化為對應的數字{ int i = 0; while (a[i] == ‘0‘) //去前置0 { i++; } if (i == a.length())return 0; //如果全是0的話,輸出0 else { int sum = 0; int cur = 1; for (int j = a.length() - 1; j >= i; j--) { sum += (a[j]-‘0‘) * cur; cur *= 10; } return sum; }}int main(){ string str; while (cin >> str) { memset(ans, 0, sizeof(ans)); int num = 0; for (int i = 0; i < str.length(); i++) { if (str[i] == ‘5‘)str[i] = ‘ ‘; } istringstream tmp(str); string aa; int res = 0; while (tmp >> aa) //將帶空格的字串流轉化為一個個獨立的string { int num = deal(aa); ans[res++] = num; } sort(ans, ans + res); for (int i = 0; i < res - 1; i++)printf("%d ", ans[i]); printf("%d\n", ans[res - 1]); } return 0;}
2018-05-27
hdu 1106 去5排序