這裡直接上答案,後面給出部分解析。
#include "stdio.h"
#include "stdlib.h"
#define max_arr 100000
typedef struct nodelistnode, *pnode;
int cmp(const void *a,const void *b)
void my_print(listnode s, int j)
else if(tmp_a >= h)else if(tmp_a >= tmp_b)else
new_node.level = 4;
list[size++] = new_node;
} qsort(list,size,sizeof(listnode),cmp);
printf("%d\n",size);
my_print(list,size);
return 0;
}
1、為什麼使用結構體
不用多說,在面向過程的c語言中,結構體是為數不多的可以用來儲存多種元素的容器,根據這個題目的要求,不可避免的要是用結構體。
2、為什麼使用結構體陣列而不是鍊錶
這個後面會給出解答,筆者嘗試使用單向鍊錶完成該題目,但是對於鍊錶和指標不熟悉的朋友來說,使用單向鍊錶會帶來極大的難度,在除錯上浪費很多時間。推薦使用陣列,可以直觀的進行除錯,另一方面,c語言標準庫里給出了優秀的排序演算法,減少造輪子。鍊錶的排序演算法難度不低,如果想使用鍊錶,請回顧下鍊錶排序。另外,該題測試用例規模較大,沒有乙個足夠強度的排序演算法,將會很容易產生超時,甚至錯誤。
3、qsort 函式的使用
這個請自行搜尋,難度不大,很容易理解,但是像了解排序原理的朋友可以嘗試去看下原始碼。
4、cmp 函式的編寫
注意cmp函式將會影響排序演算法的執行時間,乙個好而高效的cmp將會極大節約演算法執行時間。
總結以下需要注意的點:
答題過程中盡量不要造輪子,一是容易出錯,二是效率可能會低。
多掌握一些c庫函式的用法,在考試或者比賽過程中能夠節約時間,為解決核心問題提供冗餘。
PTA 1015 德才論 25分
宋代史學家司馬光在 資治通鑑 中有一段著名的 德才論 是故才德全盡謂之聖人,才德兼亡謂之愚人,德勝才謂之君子,才勝德謂之小人。凡取人之術,苟不得聖人,君子而與之,與其得小人,不若得愚人。現給出一批考生的德才分數,請根據司馬光的理論給出錄取排名。輸入第一行給出 3 個正整數,分別為 n 105 即考生...
PTA 1015 德才論 (題解 知識點)c
先把 直接給出來,再聽我慢慢講解。include using namespace std struct stu struct stu a 100000 bool cmp stu a,stu b intmain else a i lei 1 不及格者 sort a,a n,cmp printf d n...
PTA 乙級 1015 德才論 C 實現
宋代史學家司馬光在 資治通鑑 中有一段著名的 德才論 是故才德全盡謂之聖人,才德兼亡謂之愚人,德勝才謂之君子,才勝德謂之小人。凡取人之術,苟不得聖人,君子而與之,與其得小人,不若得愚人。現給出一批考生的德才分數,請根據司馬光的理論給出錄取排名。輸入格式 輸入第一行給出 3 個正整數,分別為 n 10...