PAT 乙級 1029 舊鍵盤 20

2021-08-09 02:00:58 字數 1697 閱讀 7710

舊鍵盤(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行中分別給...