這題是要紀錄每個編號的彈珠出現的次數以及彈珠如以小排到大,某顆彈珠第一個出現的位置是多少。首先可以宣告一個整數陣列以索引紀錄彈珠編號出現的次數,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題庫目錄
回首頁
沒有留言:
張貼留言