NENU 模拟练习题(问题A~问题G)
文章目錄
- 問題 A: 2011 模擬測試1(成績排名)
- 題目描述
- 參考代碼
- 問題 B: 2012 模擬測試1( A+B和C)
- 題目描述
- 參考代碼
- 問題 C: 2013 模擬測試1(個位數統計)
- 題目描述
- 參考代碼
- 問題 D: 2014 模擬測試1(A+B)
- 題目描述
- 參考代碼
- 問題 E: 2015 模擬測試1(區間求和)
- 題目描述
- 參考代碼
- 問題 F: 2016 模擬測試1(非法日期)
- 題目描述
- 參考代碼
- 問題 G: 2017 模擬測試1(統計不及格人數)
- 題目描述
- 參考代碼
問題 A: 2011 模擬測試1(成績排名)
題目描述
又到一年一度的期末考試了,老師最頭痛的問題就是從一堆學生中找最高分和最低分,你快來幫忙吧。
輸入
測試數據有多組,每組首先是一個正整數n(0 < n < 31),接下來是n行數據,每行數據代表一個學生的成績,分部為學生的姓名、學號、成績。其中姓名和學號均為不超過10個字符的字符串,成績為0到100之間的一個整數,這里保證在一組測試用例中沒有兩個學生的成績是相同的。
輸出
每組分兩行輸出成績最高和成績最低學生的姓名、學號和成績,字符串間有1空格,兩組之間用空行隔開。
樣例輸入
3 Joe Math990112 89 Mike CS991301 100 Mary EE990830 95 2 Zhangsan SW9801 70 Lisi EN9801 59樣例輸出
Mike CS991301 100 Joe Math990112 89Zhangsan SW9801 70 Lisi EN9801 59解析
sort()函數
sort()函數可以對給定區間所有元素進行排序。它有三個參數sort(begin, end, cmp),其中begin為指向待sort()的數組的第一個元素的指針,end為指向待sort()的數組的最后一個元素的下一個位置的指針,cmp參數為排序準則,cmp參數可以不寫,如果不寫的話,默認從小到大進行排序。
例如對數組a排序時,可以寫成sort(a,a+n)。n是數組大小。
排序準則cmp的寫法
如此題,我們把stud數組按照score從大到小排序,就能像這樣書寫排序準則:
再結合sort(s, s + i, cmp);就能將學生信息按照成績從大到小排序。
參考代碼
#include<bits/stdc++.h> using namespace std; struct stud{string name, num;int score; }; bool cmp(const stud x,const stud y){return x.score > y.score; }int main(){int t;while(cin>>t){stud s[t];int i = 0;while(t--){cin >> s[i++].name >> s[i-1].num >> s[i-1].score;}sort(s, s + i, cmp);cout << s[0].name << " " << s[0].num << " " << s[0].score << endl<< s[i - 1].name << " " << s[i - 1].num << " " << s[i - 1].score << endl<< endl;}return 0; }問題 B: 2012 模擬測試1( A+B和C)
題目描述
給定區間 [ ? 2 31 , 2 31 ] 內的 3 個整數 A 、 B 和 C ,請判斷 A + B 是否大于 C 。 給定區間[-2^{31}, 2^{31}]內的3個整數A、B和C,請判斷A+B是否大于C。 給定區間[?231,231]內的3個整數A、B和C,請判斷A+B是否大于C。
輸入
輸入第1行給出正整數T( T <= 10),是測試用例的個數。隨后給出T組測試用例,每組占一行,順序給出A、B和C。整數間以空格分隔。
輸出
對每組測試用例,如果A+B>C,在一行中輸出“Case #X: true”。否則輸出“Case #X: false”,其中X是測試用例的編號(從1開始)。
樣例輸入
4 1 2 3 2 3 4 2147483647 0 2147483646 0 -2147483648 -2147483647樣例輸出
Case #1: false Case #2: true Case #3: true Case #4: false解析
見代碼。
參考代碼
#include<bits/stdc++.h> using namespace std; int main(){int t;cin >> t;int ind = 1;while(t--){long long a, b, c;cin >> a >> b >> c;if(a+b>c){cout << "Case #" << ind << ": true" << endl;}else{cout << "Case #" << ind << ": false" << endl;}ind++;}return 0; }問題 C: 2013 模擬測試1(個位數統計)
題目描述
給定一個k位整數N,請編寫程序統計每種不同的個位數字出現的次數。例如:給定N = 100311,則有2個0,3個1和1個3。
輸入
輸入有多個,每行包含1個測試用例,即一個不超過1000位的正整數N。
輸出
對N中每一種不同的個位數字,以D:M的格式在一行中輸出該位數字D及其在N中出現的次數M。要求按D的升序輸出。
樣例輸入
100311 1樣例輸出
0:2 1:3 3:1 1:1解析
見代碼。
參考代碼
#include<bits/stdc++.h> using namespace std; const int N = 10; int nx[N]; int main(){string num;while(cin>>num){for (int i = 0; i < num.length();i++)nx[num[i] - '0']++;for (int i = 0; i < 10;i++){if(nx[i]>0){cout << i << ":" << nx[i] << endl;nx[i] = 0;}}}return 0; }問題 D: 2014 模擬測試1(A+B)
題目描述
求A+B的和。
輸入
有多組數據,每組兩行,每行是一個不超過200位的非負整數,沒有多余的前導0。
輸出
每組輸出一行,即相加后的結果。結果里不能有多余的前導0,即如果結果是342,那么就不能輸出為0342。
樣例輸入
1 2 1 9樣例輸出
3 10解析
這題的數據范圍很大,甚至超過long long型,所以只是單純的相加得到答案是不通過的qwq,我們要把加法器的原理復刻出來。
注意:0+0要另外判斷,不然容易被當做前導0刪掉。
參考代碼
#include<bits/stdc++.h> using namespace std; const int N = 300; int na[N], nb[N]; int main(){string a, b;while(cin>>a>>b){vector<int> c;int lena = a.length(), lenb = b.length();if(a[0]=='0'&&b[0]=='0'&&lena==1&&lenb==1){cout << "0" << endl;continue;}int len = lena;if(len<lenb)len = lenb;len += 1;int flag = 0, flagx = 0;for (int i=0;i<len;i++){if(lena-i-1>=0)na[len - i] = a[lena - i - 1] - '0';elsena[len-i] = 0;if(lenb-i-1>=0)nb[len - i] = b[lenb - i - 1] - '0';elsenb[len-i] = 0;c.push_back((na[len - i] + nb[len - i] + flagx) % 10);if(na[len-i]+nb[len-i]+flagx>=10)flagx = 1;elseflagx = 0;}reverse(c.begin(), c.end());int ind = 1;for (int i = 0; i < c.size();i++){if(ind&&c[i]==0)continue;else{cout << c[i];ind = 0;}}cout << endl;}return 0; }問題 E: 2015 模擬測試1(區間求和)
題目描述
給定一個正整數a和b,求其區間(包括a和b)內所有被3或5整除的數之和。
輸入
輸入第1行給出正整數N,是測試用例的個數。隨后給出N組測試用例,每組占一行,順序給出正整數a和b。整數間以空格分隔。a不大于b,其和也不會超過整數范圍。
輸出
對于每組測試用例,輸出a和b之間能被3整除或能被5整除的所有數之和。
樣例輸入
3 1 10 1 11 1 3樣例輸出
33 33 3解析
見代碼。
參考代碼
#include<bits/stdc++.h> using namespace std; int main(){int t;cin >> t;while(t--){int a, b, sum = 0;cin >> a >> b;for (int i = a; i <= b;i++)if(i%3==0||i%5==0)sum += i;cout << sum << endl;}return 0; }問題 F: 2016 模擬測試1(非法日期)
題目描述
在填寫各種日期時,用戶經常會填錯日期,要求你編程實現對日期有效性進行判斷。
輸入
輸入有多組數據,每組一行,表示一個日期,格式為“2016.5.24”。
輸出
每組輸入給出判斷,如果日期有效,則先輸出該日期,然后輸出true,無效則輸出false,中間一個空格隔開。
樣例輸入
2016.5.24 2016.2.30 2016.6.31樣例輸出
2016.5.24 true 2016.2.30 false 2016.6.31 false解析
見代碼。
參考代碼
#include <bits/stdc++.h> using namespace std; int mon[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int main() {int yy, mm, dd;while(scanf("%d.%d.%d", &yy, &mm, &dd)!=EOF){if ((yy % 400 != 0 && yy % 100 == 0) || yy % 4 != 0)mon[2] = 28;elsemon[2] = 29;if (mm>=1&&mm<=12&&mon[mm] >= dd)cout << yy << "." << mm << "." << dd << " true" << endl;elsecout << yy << "." << mm<< "." << dd << " false" << endl;}return 0; }問題 G: 2017 模擬測試1(統計不及格人數)
題目描述
又到一年一度的期末考試了,老師最頭痛的問題就是從一堆學生中統計不及格的人數,你快來幫忙吧。
輸入
有多組測試用例,每組第一行是正整數N(0 < N < 201),然后是N行數據,每行表示一個學生的學號和成績,中間空格隔開。
輸出
每組測試用例輸出不及格(成績<60)人數。
樣例輸入
2 CS2015001 88 SW2013002 76 3 EN2014001 59 MA2015002 95 PH2013007 77樣例輸出
0 1解析
見代碼。
參考代碼
#include<bits/stdc++.h> using namespace std; int main(){int t;while(cin>>t){int renshu = 0;while(t--){string xuehao;int score;cin >> xuehao >> score;if(score<60)renshu++;}cout << renshu << endl;}return 0; }總結
以上是生活随笔為你收集整理的NENU 模拟练习题(问题A~问题G)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android监听开机广播自启动程序
- 下一篇: [书摘]老外侃中国(埃瑞克【挪威】口述,