1. 程式人生 > >5-3 說反話-加強版 (20分)——一維陣列+堆疊思想

5-3 說反話-加強版 (20分)——一維陣列+堆疊思想

think:
1之前這道題目做過,但是自己就沒有拿到全分,今天下午測試賽又做這道題目,發現自己還是沒有拿到全分,今天晚上補題看了提示,發現第五組資料自己之前的程式碼一直無法通過,之前自己使用二維陣列來做,結果就是二維字元陣列開到500000*500000的時候就會記憶體溢位,剛才補題的時候思考是否可以用堆疊思想來實現,發現如果用堆疊思想的情況自己只需要開兩個一維500000的字元陣列,然後自己便嘗試用堆疊思想重新做一遍,然後終於AC了,下午的測試賽自己基本處於倒數,反映了別的同學補題思考的努力比自己要多得多,希望自己可以以此警醒,比賽的時候就全力以赴做題,賽後就專心平靜的補題,不要因為自己的不努力而給自己放棄的理由,一時的落後並不可怕,可怕的是自己放棄自己前進的心,鼓起勇氣不放棄,加油奮鬥
2自己剛才一度將堆疊思想與佇列思想混淆,細心反思

5-3 說反話-加強版 (20分)

給定一句英語,要求你編寫程式,將句中所有單詞的順序顛倒輸出。

輸入格式:
測試輸入包含一個測試用例,在一行內給出總長度不超過500 000的字串。字串由若干單詞和若干空格組成,其中單詞是由英文字母(大小寫有區分)組成的字串,單詞之間用若干個空格分開。

輸出格式:
每個測試用例的輸出佔一行,輸出倒序後的句子,並且保證單詞間只有1個空格。

輸入樣例:
Hello World Here I Come

輸出樣例:
Come I Here World Hello

hint:

測試點1    答案正確    12/12   1   1   sample
測試點2 答案正確 1/1 14 1 一個詞,末尾有空格 測試點3 答案正確 1/1 1 1 最小詞,前有空格 測試點4 答案正確 1/1 2 1 只有空格 測試點5 答案正確 5/5 12 2 最大句子,卡strcat:前500000個字母組成1個單詞,後面每個單詞1個字母

以下為答案正確程式碼

#include <stdio.h>
#include <string.h>
char st[540000], link[540000];
int tp, flag;
int main()
{
    int
len, i, j; while(gets(st) != NULL) { tp = flag = 0; len = strlen(st); for(i = len-1; i >= 0; i--) { if(st[i] == ' ') { if(tp > 0) { if(flag != 0) printf(" "); for(j = tp-1; j >= 0; j--) { printf("%c", link[j]); } tp = 0; flag = 1; } } else { link[tp++] = st[i]; } } if(tp > 0) { if(flag != 0) printf(" "); for(j = tp-1; j >= 0; j--) { printf("%c", link[j]); } tp = 0; flag = 1; } if(flag) printf("\n"); } return 0; }