5-3 說反話-加強版 (20分)——一維陣列+堆疊思想
阿新 • • 發佈:2019-02-19
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;
}