本題要求讀入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 個分數,中間以空格分隔...