2010年4月8日 星期四

Problem 10474 Where is the Marble?,彈珠遊戲

某天 Raju 和 Meena 這兩個傢伙玩個彈珠遊戲,居然需要用寫程式來偷吃步,那不就是在寫「外掛」了嗎?

這題是要紀錄每個編號的彈珠出現的次數以及彈珠如以小排到大,某顆彈珠第一個出現的位置是多少。首先可以宣告一個整數陣列以索引紀錄彈珠編號出現的次數,C 語言程式碼如下:
if (N == 0 && Q == 0) return 0;
int marble[MAXLEN] = {0};
count = 1;
while (N --)
scanf("%d", &marbleNum), marble[marbleNum] ++;

再從 1 ~ 10000 將大於 0 的索引轉變成位置,C 語言程式碼如下:
for (i = 0; i < MAXLEN; i ++)
if (marble[i]) record = marble[i], marble[i] = count,
count += record;

最後,只須要把結果印出即可,如遇索引的值為 0,輸出「XX not found」;反之,則將輸出所引的值:
printf("CASE# %d:\n", caseNum ++);    
while (Q --)
{
scanf("%d", &marbleNum);
if (marble[marbleNum]) printf("%d found at %d\n",
marbleNum, marble[marbleNum]);
else printf("%d not found\n", marbleNum);
}

By David.K

p10474題目連結
回ACM題庫目錄
回首頁

沒有留言: