1. 評學習小標兵
【問題描述】
東東所在的班級有 N 名同學,期末考試進行了數學、語文、英語、地理四門功課的測試。班主任要將這 N 名學生中總分前三名定為本學期的“學習小標兵”。現在給出這N 名學生的姓名和各科成績,請你編程找到總分前三名,並依次輸出他們的姓名。所給數據不會有總分相同的情況(使用快速排序完成)。
【輸入格式】
輸入包含 N+1 行,第一行僅有一個正整數 N (N≤40),表示東東班里學生的總數,接下來的 N 行,每行描述一個學生的考試信息,依次為姓名、數學成績、語文成績、英語成績與地理成績,兩兩之間用一個空格分隔。注意:姓名(不會同名)都用小寫字母表示(不超過 10 個字母),成績全都是不超過 200 的非負整數。
【輸出格式】
輸出包含三行,每行僅包含一個學生的姓名,依次為第一名到第三名學生的姓名。
【樣例輸入】
4
jing 98 90 87 74
ming 96 92 85 97
jun 95 78 56 91
hong 95 100 85 78
【樣例輸出】
ming
hong
jing
#include<iostream> using namespace std; struct p { char name[15]; int math; int chinese; int eglish; int geo; int sum; }; p a[110]; void quick_sort(int left,int right) { if(left >= right) return; int i = left; int j = right; p x = a[left]; while(i < j) { while(i < j && a[j].sum < x.sum) j--; a[i] = a[j]; while(i < j && a[i].sum > x.sum) i++; a[j] = a[i]; } a[i] = x; quick_sort(left,i-1); quick_sort(i+1,right); } int main() { int n,f=0,s=0,i,j; cin>>n; for(i=0; i<n; i++) { cin>>a[i].name>>a[i].math>>a[i].chinese>>a[i].eglish>>a[i].geo; a[i].sum = a[i].math+a[i].chinese+a[i].eglish+a[i].geo; } quick_sort(0,n-1); for(i=0; i<3; i++) cout<<a[i].name<<endl; return 0; }
2.挑選宇宙總統
【問題描述】
地球歷公元6036年,全宇宙准備競選一個最賢能的人當總統,共有n個非凡拔尖的人競選總統,現在票數已經統計完畢,請你算出誰能夠當上總統(使用快速排序和歸並排序完成)。
【輸入格式】
第一行為一個整數n,代表競選總統的人數。
接下來有n行,分別為第一個候選人到第n個候選人的票數。
【輸出格式】
共兩行,第一行是一個整數m,為當上總統的人的號數。
第二行是當上總統的人的選票。
說明:票數小於10000位數字。n<=20
【樣例輸入】
5
98765
12365
87954
1022356
985678
【樣例輸出】
4
1022356
#include<iostream> #include<cstring> #include<algorithm> const int maxn=10010; using namespace std; struct node{ string s; int id; } a[maxn]; bool cmp(node x,node y){ if(x.s.size()==y.s.size()) return x.s>y.s; else return x.s.size()>y.s.size(); } int main(){ int n; cin >> n; for(int i=1;i<=n;++i) cin>>a[i].s,a[i].id=i; sort(a+1,a+1+n,cmp); cout<<a[1].id<<endl<<a[1].s; return 0; }
1.排序算法
【問題描述】
快速排序和歸並排序算法是信息學競賽的必備算法。對於快速排序和歸並排序算法還不是很熟練的同學需要多多練習,掌握后獨立完成。
【輸入格式】
輸入文件sort.in的第一行為一個正整數N,(1 ≤ N ≤ 100000)
第二行包含N個空格隔開的正整數,為你需要進行排序的數,每個數據保證不超過100000000。
【輸出格式】
輸出文件sort.out將給定的N個數從大到小輸出,數之間使用空格隔開,行末換行並且沒有空格。
【樣例輸入】
5
4 2 4 5 1
【樣例輸出】
5 4 4 2 1
#include <fstream> using namespace std; ifstream cin("sort.in"); ofstream cout("sort.out"); int a[1000000],n; void quick_sort(int left,int right){ if(left >= right) return; int i = left; int j = right; int x = a[left]; while(i < j){ while(i < j && x <= a[j]) j--; a[i] = a[j]; while(i < j && x >= a[i]) i++; a[j] = a[i]; } a[i] = x; quick_sort(left,i-1); quick_sort(i+1,right); } int main(){ cin >> n; for(int i = 0;i < n;i++){ cin >> a[i]; } quick_sort(0,n-1); for(int i = n-1;i >=0;i--){ cout << a[i] << " "; } cin.close(); cout.close(); return 0; }