時間限制:
1000 ms | 記憶體限制:
65535 kb
難度:2 描述
今天lzq在玩一種小遊戲,但是這遊戲數有一點點的大,他乙個人玩的累,想多拉一些人進來幫幫他,你能寫乙個程式幫幫他嗎?這個遊戲是這樣的:有一行數字,如果我們把這行數字中的『5』都看成空格,那麼就得到一行用空格分割的若干非負整數(可能有些整數以『0』開頭,這些頭部的『0』應該被忽略掉,除非這個整數就是由若干個『0』組成的,這時這個整數就是0)。
輸入輸入包含多組測試用例,每組輸入資料只有一行數字(數字之間沒有空格),這行數字的長度不大於5000。
輸入資料保證:分割得到的非負整數不會大於100000000;如果有輸入資料全為5,則輸出0。
輸出對於每個測試用例,輸出分割得到的整數排序的結果,相鄰的兩個整數之間用乙個空格分開,每組輸出佔一行。
樣例輸入
0051231232050775
樣例輸出
0 77 12312320
分析:仔細考慮一下,本題輸入乙個字串,從前往後遍歷的同時,我們要開乙個陣列n,同時有乙個標記的變數標記,於是需要考慮三個點:第一,如果該字母不是5,那麼就將從該字母到遇見字母5之前的部分當做乙個正數存入n[m]中,那什麼時候m改變呢,這是我們需要考慮的第二點,如果你遇見5,就讓m++,那麼如果有連續的5出現呢,是不是行不通了呢,所以這是我們就用到了標記變數bj,如果遇見5時,n[m]裡有存入的東西,那麼就讓m++,如果沒有就不讓m++;我們還應該考慮最後乙個問題就是如果最後乙個字母不是5的話,是不是陣列的個數會少1呢(因為下標是從0開始的),所以我們要單獨判斷一下如果最後乙個字母不是5,我們讓m++,有人可能會迷糊,如果是5,為啥不m++呢,那是因為在第二點中我們已經判斷過了,如果最後乙個字母是5的話,已經加過了。
於是知道了一以上三點,我們就能寫出**了。
#include #include#include#include#includeusing namespace std;
int main()
{ char s[1005];
int n[1005];
while(~scanf("%s",s))
{int len=strlen(s);
memset(n,0,sizeof(n));///將每輪的陣列n都刷為0
int bj=0,m=0;///下標m是從0開始的,標記標量bj初始也是0
for(int i=0;i
nyoj525 一道水題
時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 今天lzq在玩一種小遊戲,但是這遊戲數有一點點的大,他乙個人玩的累,想多拉一些人進來幫幫他,你能寫乙個程式幫幫他嗎?這個遊戲是這樣的 有一行數字,如果我們把這行數字中的 5 都看成空格,那麼就得到一行用空格分割的若干非負整數 可...
NYOJ 525 一道水題
時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 今天lzq在玩一種小遊戲,但是這遊戲數有一點點的大,他乙個人玩的累,想多拉一些人進來幫幫他,你能寫乙個程式幫幫他嗎?這個遊戲是這樣的 有一行數字,如果我們把這行數字中的 5 都看成空格,那麼就得到一行用空格分割的若干非負整數 可...
NYOJ 525一道水題(快排)
時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 今天lzq在玩一種小遊戲,但是這遊戲數有一點點的大,他乙個人玩的累,想多拉一些人進來幫幫他,你能寫乙個程式幫幫他嗎?這個遊戲是這樣的 有一行數字,如果我們把這行數字中的 5 都看成空格,那麼就得到一行用空格分割的若干非負整數 可...