1. 程式人生 > >hdu 1106 去5排序

hdu 1106 去5排序

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排序