noip第20課做業

1. 評學習小標兵node

【問題描述】ios

東東所在的班級有 N 名同窗,期末考試進行了數學、語文、英語、地理四門功課的測試。班主任要將這 N 名學生中總分前三名定爲本學期的「學習小標兵」。如今給出這N 名學生的姓名和各科成績,請你編程找到總分前三名,並依次輸出他們的姓名。所給數據不會有總分相同的狀況(使用快速排序完成)。算法

【輸入格式】編程

輸入包含 N+1 行,第一行僅有一個正整數 N (N≤40),表示東東班裏學生的總數,接下來的 N 行,每行描述一個學生的考試信息,依次爲姓名、數學成績、語文成績、英語成績與地理成績,兩兩之間用一個空格分隔。注意:姓名(不會同名)都用小寫字母表示(不超過 10 個字母),成績全都是不超過 200 的非負整數。學習

【輸出格式】測試

輸出包含三行,每行僅包含一個學生的姓名,依次爲第一名到第三名學生的姓名。ui

【樣例輸入】spa

4code

jing 98 90 87 74blog

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; }
相關文章
相關標籤/搜索