1038 統計同成績學生

2021-07-10 02:06:51 字數 2544 閱讀 3404

本題要求讀入n名學生的成績,將獲得某一給定分數的學生人數輸出。

輸入格式:

輸入在第1行給出不超過105

的正整數n,即學生總人數。隨後1行給出n名學生的百分制整數成績,中間以空格分隔。最後1行給出要查詢的分數個數k(不超過n的正整數),隨後是k個分數,中間以空格分隔。

輸出格式:

在一行中按查詢順序給出得分等於指定分數的學生人數,中間以空格分隔,但行末不得有多餘空格。

輸入樣例:

10

60 75 90 55 75 99 82 90 75 50

3 75 90 88

輸出樣例:
3 2 0
演算法:

演算法開始。

讀入n,n個成績,要查詢分數數量k,k個要查詢的成績。

用qsort對n個成績進行降序排序。

查詢第i個成績,如果i不小於k,則跳到第十六步。

如果begin大於等於end,則跳到第十五步。

如果begin上的成績大於要查詢的成績,end上的成績小於要查詢的成績,進行下一步,否則跳到第十一步。

middle=(begin+end)/2。

如果middle上的成績大於要查詢的成績,則begin=middle-1,跳回第五步。

如果middle上的成績小於要查詢的成績,則end=middle+1,跳回第五步。

如果middle上的成績等於要查詢的成績,則middle一直加一,直到middle上的成績小於要查詢的成績或者middle等於n-1,將middle賦值給tmp。跳到第十三步。

如果begin上的成績等於要查詢的成績,則begin一直加一,直到begin上的成績小於要查詢的成績或者begin等於n-1,將begin賦值給tmp,跳到第十三步。

如果end上的成績等於要查詢的成績,則end一直加一,知道end上的成績小於要查詢的成績或者end等於n-1,將end賦值給tmp,跳到第十三步。

如果tmp上的成績小於要查詢的成績則tmp減一。

如果tmp上的成績不大於要查詢的成績而且tmp不小於零,count加一,tmp減一。

i加一,回到第四步。

輸出每個要查詢成績的count。

演算法結束。

#include #include int cmp(const void* v1, const void* v2);

int main(void)

scanf_s("%d", &k);

search = (int*)calloc(k, sizeof(int));

count = (int*)calloc(k, sizeof(int));

for (i = 0; i < k; i++)

qsort(grades, n, sizeof(int), cmp);

for (i = 0; i < k; i++)

tmp = begin;

flag = 1;

break;

}else if (grades[end] == search[i])

tmp = end;

flag = 1;

break;

}middle = (begin + end) / 2;

if (grades[middle] == search[i])

tmp = middle;

flag = 1;

break;

}else if (grades[middle] > search[i])

else if (grades[middle] < search[i])

} while (begin < end);

if (flag)

while (grades[tmp] == search[i])

} }for (i = 0; i < k; i++)

} free(grades);

free(count);

free(search);

return 0;

}int cmp(const void* v1, const void* v2)

但是這個演算法儘管運用了qsort和二分查詢法,但是時間複雜度達到了o(nlogn),最後個測試點執行超時了。

下面來個專門解決問題的演算法。

演算法開始。

讀入n。

每讀入乙個成績i,就對grades[i]加一。

讀入k。

每讀入乙個成績i,就輸出grades[i]。如果i不等於k-1,就輸出乙個空格。

演算法結束。

是個方法時間複雜度只有o(n)。下列**編寫於vs2015,若要在pat上執行,修改sanf_s即可。

#include #include int main(void) 

scanf_s("%d", &k);

for (i = 0; i < k; i++)

free(grades);

return 0;

}

1038 統計同成績學生

題目資訊 本題要求讀入n名學生的成績,將獲得某一給定分數的學生人數輸出。輸入格式 輸入在第1行給出不超過105的正整數n,即學生總人數。隨後1行給出n名學生的百分制整數成績,中間以空格分隔。最後1行給出要查詢的分數個數k 不超過n的正整數 隨後是k個分數,中間以空格分隔。輸出格式 在一行中按查詢順序...

1038 統計同成績學生

時間限制 250 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 本題要求讀入n名學生的成績,將獲得某一給定分數的學生人數輸出。輸入格式 輸入在第1行給出不超過105的正整數n,即學生總人數。隨後1行給出n名學生的百分制整數成績,中間以...

1038 統計同成績學生

題意描述 本題要求讀入 n 名學生的成績,將獲得某一給定分數的學生人數輸出。輸入格式 輸入在第 1 行給出不超過 10 5 的正整數 n,即學生總人數。隨後一行給出 n 名學生的百分制整數成績,中間以空格分隔。最後一行給出要查詢的分數個數 k 不超過 n 的正整數 隨後是 k 個分數,中間以空格分隔...