hdu 1106 去5排序
阿新 • • 發佈:2018-05-27
std 可能 clas 排序 cst 一行 input tar 這一
你的任務是:對這些分割得到的整數,依從小到大的順序排序輸出。
題目鏈接: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排序