看板 C_and_CPP 關於我們 聯絡資訊
這邊也好久沒人問解題的問題了,讓我來懷舊一下(雷)。 首先分析題目。 第一行是給定字串,也就是gets(code);的地方。 以12233445來說, 出現1就替換成2,2替換成3,這個trick原po已有解了。 這是一個初學的題目,且假定題目出題正確。 在ASCII code又可見字元不重複的情況下, 就算是因為替換而將code乘以兩倍, 長度也不會超過1000。 所以,char code[1000] = {};都會過。 可能原po會納悶:設10000都不過了,設1000會過?! 是的,在改進一些小問題後是會過的。 code的改法直接在以下原文修改。 以及點出回車問題的產生地點。 ※ 引述《snoopy0907 ()》之銘言: : 開發平台 windows8 + mingw + notepad++ : 開發語言 純C : 問題出處 http://140.122.185.166/ZeroJudge/ShowProblem?problemid=a100 : 問題:其實自己餵一些簡單輸入都會正確,但是一直不給過,不太知道原因 : 但是我發現用一行有上萬個英文字母的測資時,似乎無法一次全部getchar進來 : 很固定在四千九百多的字元後,getchar似乎就沒再讀進來了,我在想是不是 : 輸入流的緩衝區大小有限制的關係,可是如果真的是這樣, : 我不太清楚下一步要怎麼處理了~不知道有沒有前輩可以指點一下呢? : 謝謝~ : 程式碼不長,我的Code如下 : #include<stdio.h> : #include<string.h> : int main() : { : int num; : int temp; : int count, i, j, k; : char code[10000] = {}; 可以改成 char code[1000] = {};確切測資有多長我不知道。 : char decode; : scanf("%d", &num); ^^^^^^^^^^^^^^^^^^^^^^^ : rewind(stdin); : for( i = 0; i < num; i++ ){ : gets(code); ^^^^^^^^^^^^^ 兩行標記處就是產生回車問題的地方。 這是大陸用語,其解釋請參考wiki或google之。 所以在scanf("%d", &num);之後的rewind該行 替換成簡單的getchar();就可以避免。 : count = strlen(code); : for( j = 0; j < 4; j++ ){ : while( ( decode = getchar() ) != '\n' ){ : temp = decode; : for( k = 0; k < count; k+=2 ){ : if( decode == code[k] ){ : if( ( k % 2 ) == 0 ) { OOOOOOOOOOOOOOOOOOOOO : temp = code[k+1]; OOOOOOOOOOOOOOOOOOO k有可能mod 2不等於0嗎?應該是不會啦,if該行拿掉。 另外,你應該在temp = code[k + 1];比對成功後break;掉for迴圈。 : } : } : } : printf("%c", temp); : } : printf("\n"); : } : printf("\n"); XXXXXXXXXXXXXXXX 題目separate空白行是指兩組答案"之間"空白, 目前寫法是每組答案都空一行,鐵定錯! 可以包在 if(i != num - 1) { } 之中就會對了。 : } : return 0; : } 以上。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.63.96.2
snoopy0907:謝謝~其實我只把rewind換成getchar就過了~感激 02/21 10:03
snoopy0907:沒遇過回車問題,來研究一下~ 02/21 10:04