算法學習--Day1
阿新 • • 發佈:2018-04-15
span -h 輸入 描述 數組 UC -c AD 如果
為了沖刺研究生初試,我準備在課余時間撿起往日的算法。多多練習算法題目,提前準備算法的機試。
今天是4月14日,距離算法考試還有兩個月的時間吧,這兩個月的所學所得我就都記錄在這裏了。不僅僅包括算法的準備,還包括英語、項目的準備。希望在兩個月後能到理想的學校去深造學習。
Come on!
開始我就從基礎的題目入手,鑒於九度oj已經gg了,我將陣地轉移到牛客網,在這裏開始刷機試題目。
第一題:
有N個學生的數據,將學生數據按成績高低排序,如果成績相同則按姓名字符的字母序排序,如果姓名的字母序也相同則按照學生的年齡排序,並輸出N個學生排序後的信息。
輸入描述:
測試數據有多組,每組輸入第一行有一個整數N(N<=1000),接下來的N行包括N個學生的數據。
每個學生的數據包括姓名(長度不超過100的字符串)、年齡(整形數)、成績(小於等於100的正數)。
輸出描述:
將學生信息按成績進行排序,成績相同的則按姓名的字母序進行排序。
然後輸出學生信息,按照如下格式:
姓名 年齡 成績
學生姓名的字母序區分字母的大小寫,如A要比a的字母序靠前(因為A的ASC碼比a的ASC碼要小)。
示例1
輸入
3
abc 20 99
bcd 19 97
bed 20 97
輸出
bcd 19 97
bed 20 97
abc 20 99
這道題目不難,把代碼放上
#include <iostream> #include <stdio.h> #include<algorithm> using namespace std; struct E{ char name[101]; int age; int grades; }buf[1000]; bool cmp(E a, E b){ if (a.grades != b.grades) return a.grades < b.grades; int cmp = strcmp(a.name,b.name); if (cmp != 0){ return cmp < 0; } return a.age<b.age; }int main() { int n; while (scanf("%d",&n)!=EOF){ for(int i=0;i<n;i++){ scanf("%s%d%d",buf[i].name,&buf[i].age,&buf[i].grades); } sort(buf,buf+n,cmp); for(int i=0;i<n;i++){ printf("%s %d %d\n",buf[i].name,buf[i].age,buf[i].grades); } } return 0; }
第二題:
題目描述
用一維數組存儲學號和成績,然後,按成績排序輸出。輸入描述:
輸入第一行包括一個整數N(1<=N<=100),代表學生的個數。 接下來的N行每行包括兩個整數p和q,分別代表每個學生的學號和成績。
輸出描述:
按照學生的成績從小到大進行排序,並將排序後的學生信息打印出來。 如果學生的成績相同,則按照學號的大小進行從小到大排序。示例1
輸入
3 1 90 2 87 3 92
輸出
2 87 1 90 3 92
#include <stdio.h> #include <iostream> #include <algorithm> using namespace std; struct E{ int number; int scores; }buf[101]; bool cmp(E a,E b){ if (a.scores!=b.scores) return a.scores<b.scores; else{ return a.number<b.number; } } int main(){ int n; cin>>n; for(int i=0;i<n;i++){ scanf("%d%d",&buf[i].number,&buf[i].scores); } sort(buf,buf+n,cmp); for(int i=0;i<n;i++){ printf("%d %d\n",buf[i].number,buf[i].scores); } return 0; }
算法學習--Day1