舊鍵盤(20)
時間限制
200 ms
記憶體限制
65536 kb
**長度限制
8000 b
判題程式
standard
作者 chen, yue
舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字、以及實際被輸入的文字,請你列出肯定壞掉的那些鍵。
輸入格式:
輸入在2行中分別給出應該輸入的文字、以及實際被輸入的文字。每段文字是不超過80個字元的串,由字母a-z(包括大、小寫)、數字0-9、以及下劃線「_」(代表空格)組成。題目保證2個字串均非空。
輸出格式:
按照發現順序,在一行中輸出壞掉的鍵。其中英文本母只輸出大寫,每個壞鍵只輸出一次。題目保證至少有1個壞鍵。
輸入樣例:
7_this_is_a_test
_hs_s_a_es
輸出樣例:
7ti起初,我的想法是,以第一行為標準,和第二行進行對比,首先全部換成大寫。如果第一行a[i]和第二行b[i]第乙個的一樣,就跳過對比下乙個,如果不一樣,就把這個a[i]放到c[k++]裡儲存起來。為了避免這個當前不同的a[i]和字串陣列c裡面已有的字元重複,先進行查重。如果c裡已經有了就不儲存進c裡了。這樣的方法,我覺得挺可行的,但是最後三組資料過不去。就有點頭疼,想了很久,我又試了試,發現了一點毛病。輸進去888555 8,這樣的倆行,輸出來是8.但是我參考其他人的方法,用的雜湊。就能顯示出正確的答案。所以,我認為之所以過不去最後的三個資料,是因為他們的資料是不夠完整的。888555 8這樣的輸入就不夠嚴謹,第二行應該輸進去888。我也是找不到為什麼過不去,只好這樣想了。我把不能全部通過的**也放這裡吧。
#include
#include
int main()
for(i=0;iif(b[i]>='a'&&b[i]<='z')
b[i]=b[i]-32;
}for(i=0;iif(a[i]==b[j])
if(a[i]!=b[j])
}if(flag==1)
c[k++]=a[i];
else
break;
}} printf("%s",c);
return
0;}
為了能全部通過,我也是蒐集了一些部落格去看,現在我覺得即使乙個題我寫出來了,我也應該去搜搜其他博主的部落格,方法不一樣,或者是我的太笨拙了。多見見大神的,開闊一下視野。這個題,其他博主都很一致,都是先化為大寫,再找個標記陣列,陣列大小比ascii碼稍大點,全部清零。第一行出現過的字元的ascii碼所在的陣列,標記一下,也就是置為一;**實現就是這樣:c[a[i]]=1
,然後呢,再把第二行出現過的字元的ascii碼所在的陣列值為零,就是這樣c[b[i]]=0;
,這樣一來,標記陣列裡為一的都是壞鍵盤字母。然後按照正確地第一行出現的順序,輸出就行了。方法挺簡單的,想不到。附上**:
#include
#include
int main()
for(i=0;iif(b[i]>='a'&&b[i]<='z')
b[i]=b[i]-32;
c[b[i]]=0;
}for(i=0;iif(c[a[i]]==1)
}return
0;}
PAT 乙級 1029 舊鍵盤 20
時間限制 200 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字 以及實際被輸入的文字,請你列出肯定壞掉的那些鍵。輸入格式 輸入在2行中分別給...
PAT乙級 1029 舊鍵盤 20
時間限制 200 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字 以及實際被輸入的文字,請你列出肯定壞掉的那些鍵。輸入格式 輸入在2行中分別給...
PAT 乙級 1029 舊鍵盤 20
時間限制 200 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 舊鍵盤上壞了幾個鍵,於是在敲一段文字的時候,對應的字元就不會出現。現在給出應該輸入的一段文字 以及實際被輸入的文字,請你列出肯定壞掉的那些鍵。輸入格式 輸入在2行中分別給...