编程题
第一题(难度系数2,15 个计分点)
题目编号:22121801CB01 知识点:运算符
编程实现:求位数
题目描述:
给定一个正整数N(1 <N<10< span>
</N<10<>8),输出N为几位数。
输入描述:输入一个正整数N(1 <N<10< span>
</N<10<>8)
输出描述:输出一个整数,表示N为几位数
样例输入:15
样例输出:2
评分标准:
3分:能正确输出第一组数据;
3分:能正确输出第二组数据;
3分:能正确输出第三组数据;
3分:能正确输出第四组数据;
3分:能正确输出第五组数据。
测试用例:
|
输入 |
3 |
23 |
999 |
567834 |
98123456 |
|
输出 |
1 |
2 |
3 |
6 |
8 |
第二题(难度系数 3,18 个计分点)
题目编号:22121801CB02 知识点:循环 判断
编程实现:字符反转
题目描述:
给定一个只包含大写字母“M”和“W”的字符串(字符串长度小于100),然后对字符串中位置为偶数的字符进行反转(M反转为W,W反转为M;字符串中左边第1个字符位置为1)。
例如:原字符串为“WMMW”,反转后为“WWMM”
输入描述:输入一个只包含大写字符“M”和“W”的字符串(字符串长度小于100)
输出描述:输出一个字符串,表示对原字符串中位置为偶数的字符反转后的字符串
样例输入:WMMW
样例输出:WWMM
评分标准:
3分:能正确输出第一组数据;
3分:能正确输出第二组数据;
3分:能正确输出第三组数据;
3分:能正确输出第四组数据;
3分:能正确输出第五组数据;
3分:能正确输出第六组数据。
测试用例:
|
输入 |
WWMMWMW |
MWMWMWMWM |
MWMWMWMWWWWM |
MWMWMWMWWWWMMWMWMWMWW |
|
输出 |
WMMWWWW |
MMMMMMMMM |
MMMMMMMMWMWW |
MMMMMMMMWMWWMMMMMMMMW |
|
输入 |
MMMMWMWMWMWMMMMMMWWWMMWMWMWMWW |
|||
|
输出 |
MWMWWWWWWWWWMWMWMMWMMWWWWWWWWM |
|||
|
输入 |
WMMWWWWMWMWMWMWMMMMMMMMMMWMWWMMMMMMMMMWMWW |
|||
|
输出 |
WWMMWMWWWWWWWWWWMWMWMWMWMMMMWWMWMWMWMWWWWM |
|||
第三题(难度系数 3,20 个计分点)
题目编号:22121801CB03 知识点:循环 判断 数组
编程实现:排名
题目描述:
某比赛有N(2≤N≤50)名选手参加,给定每名参赛选手的编号(1到N)和比赛得分(0≤得分≤100),请按照分数从高到低的顺序排序,如果分数相同就按照编号排序,编号小的排前边。
输入描述:
第一行输入一个正整数N(2≤N≤50),表示参赛人数
第二行开始,共输入N行,每行两个正整数,分别表示参赛选手的编号和比赛得分(0≤得分≤100),正整数之间以一个空格隔开
输出描述:
按照排序规则,输出N行,每行两个正整数,分别表示编号和得分,正整数之间以一个空格隔开
样例输入:
3
3 84
1 87
2 84
样例输出:
1 87
2 84
3 84
评分标准:
3分:能正确输出第一组数据;
3分:能正确输出第二组数据;
3分:能正确输出第三组数据;
3分:能正确输出第四组数据;
3分:能正确输出第五组数据;
5分:能正确输出第六组数据;
测试用例:
|
输入 |
输出 |
||||||||||
|
3 1 84 3 84 2 87 |
7 1 21 5 5 6 12 2 89 4 40 7 59 3 5 |
14 6 10 9 61 7 39 1 59 3 77 11 81 12 7 4 15 5 28 2 30 14 58 8 68 10 96 13 97 |
20 1 45 2 73 3 71 4 85 5 66 6 62 7 23 8 13 9 33 10 13 11 22 12 87 13 43 14 6 15 95 16 76 17 22 18 53 19 52 20 88 |
34 1 84 2 96 3 3 4 94 5 94 6 37 7 55 8 79 9 55 10 49 11 47 12 28 13 72 14 51 15 59 16 0 17 20 18 38 19 8 20 87 21 25 22 2 23 5 24 9 25 38 26 61 27 58 28 79 29 60 30 45 31 37 32 39 33 48 34 48 |
49 1 57 2 83 3 15 4 22 5 90 6 22 7 67 8 17 9 34 10 31 11 14 12 67 13 45 14 56 15 48 16 97 17 54 18 29 19 22 20 40 21 99 22 79 23 72 24 93 25 59 26 20 27 61 28 33 29 29 30 78 31 64 32 13 33 17 34 77 35 23 36 37 37 39 38 43 39 76 40 0 41 23 42 39 43 47 44 36 45 35 46 50 47 27 48 56 49 58 |
2 87 1 84 3 84 |
2 89 7 59 4 40 1 21 6 12 3 5 5 5 |
13 97 10 96 11 81 3 77 8 68 9 61 1 59 14 58 7 39 2 30 5 28 4 15 6 10 12 7 |
15 95 20 88 12 87 4 85 16 76 2 73 3 71 5 66 6 62 18 53 19 52 1 45 13 43 9 33 7 23 11 22 17 22 8 13 10 13 14 6 |
2 96 4 94 5 94 20 87 1 84 8 79 28 79 13 72 26 61 29 60 15 59 27 58 7 55 9 55 14 51 10 49 33 48 34 48 11 47 30 45 32 39 18 38 25 38 6 37 31 37 12 28 21 25 17 20 24 9 19 8 23 5 3 3 22 2 16 0 |
21 99 16 97 24 93 5 90 2 83 22 79 30 78 34 77 39 76 23 72 7 67 12 67 31 64 27 61 25 59 49 58 1 57 14 56 48 56 17 54 46 50 15 48 43 47 13 45 38 43 20 40 37 39 42 39 36 37 44 36 45 35 9 34 28 33 10 31 18 29 29 29 47 27 35 23 41 23 4 22 6 22 19 22 26 20 8 17 33 17 3 15 11 14 32 13 40 0 |
第四题(难度系数4,25个计分点)
题目编号:22121801PB04 知识点:贪心算法
编程实现:充电站
题目描述:
一条笔直的公路沿途有N(2≤N≤100)个充电站,包含起点和终点各一个。小明驾驶电动汽车要从公路的起点到达终点。
已知电动汽车充满电后可行驶的里程数D(10≤D≤10000),及N个充电站每相邻的两个充电站之间的距离,并且小明在起点第一次给电动汽车充满电。请帮助小明计算出最少充电几次才能从起点到达终点(需包含起点的第一次充电)。
注意:
1)到达终点后不需要再充电;
2)每次充电都要充满。
例如:D = 10,N = 7,7个充电站之间的距离依次为1,3,6,8,1,4,最少需要充电3次。
第一次充电在起点(第1个充电站);
第二次充电在第4个充电站(此时行驶里程为10,刚好电量耗尽);
第三次充电在第6个充电站(此时在第二次充满电后行驶了9,剩余电量只能行驶1,距离下一充电站的距离为4,所以必须在此充电站充电)。
输入描述:
第一行输入两个正整数D(10≤D≤10000)和N(2≤N≤100),分别表示电动汽车充满电后可行驶的里程数和公路沿途充电站的个数,正整数之间以一个空格隔开
第二行输入N-1个正整数(1≤正整数≤100000),依次表示相邻两个充电站之间的距离,正整数之间以一个空格隔开
输出描述:
输出一个整数,表示电动汽车从公路的起点到达终点最少充电的次数,如果不能到达终点输出-1(需包含起点的第一次充电)。
样例输入:
10 7
1 3 6 8 1 4
样例输出:
3
评分标准:
4分:能正确输出第一组数据;
4分:能正确输出第二组数据;
4分:能正确输出第三组数据;
4分:能正确输出第四组数据;
4分:能正确输出第五组数据;
5分:能正确输出第六组数据。
测试用例:
|
输入 |
12 7 8 11 5 9 13 5 |
55 8 23 32 52 21 32 9 43 |
133 17 120 98 23 12 78 133 77 99 23 12 107 123 76 23 88 66 |
|
输出 |
-1 |
4 |
11 |
|
输入 |
2347 30 424 439 268 636 1713 184 254 1616 692 1093 1964 1795 567 1017 788 593 1806 1205 206 154 954 912 1435 1531 295 1236 599 2033 492 |
||
|
输出 |
16 |
||
|
输入 |
7777 50 4545 175 2236 6318 1976 4967 3678 3822 7064 6645 79 6878 6450 2315 4334 4305 7375 2470 5399 6690 6141 6519 1375 5612 4269 4552 1756 3300 1722 237 1955 5965 3393 2399 2120 4819 1277 7361 1172 1028 4811 1104 2170 6714 2173 597 6173 6732 5580 |
||
|
输出 |
32 |
||
|
输入 |
9978 100 9554 3571 4157 329 5539 2167 1251 6377 932 2140 3613 6002 2735 3971 2521 2400 6038 5822 1108 9737 9760 7396 7988 8546 582 4656 7677 1308 5208 1702 5789 79 9832 6258 183 3802 5184 3366 8915 1150 1714 2945 4886 5336 39 9045 8352 8239 5629 7037 3585 6196 6517 9505 6902 7541 523 396 8686 1098 1589 7672 6306 2946 5701 828 2001 4577 2211 8262 7862 7216 8289 3387 8588 9846 3022 3286 4906 635 2868 8814 1822 4005 691 3961 6577 6132 6318 369 2606 3053 9101 3116 1227 8875 2833 1325 5847 |
||
|
输出 |
61 |
||
第五题(难度系数 5,30 个计分点)
题目编号:22121801CB05 知识点:递增数列
编程实现:猴子拿桃
题目描述:
有N筐桃子从左到右排成一排,已知每筐桃子的数量。现猴子要按照以下规则拿取桃子:
1)猴子每次拿一筐桃子,一共要拿K次桃子;
2)猴子只能按照从左到右的顺序拿取桃子,不能回头,且每次拿取桃子的数量不能少于(大于等于)上一次。
当给定桃子筐数N(1≤N≤12)及每筐桃子的数量,和要拿取桃子的次数K(1≤K≤N),请编写程序,如果有符合规则的拿取方式,输出猴子最多可以拿到的桃子数量,否则输出0。
例如:
N = 4,4筐桃子的数量从左到右依次为16,12,16,17;
K=3,猴子一共要拿3次桃子,符合规则的拿取方式有:[16,16,17],[12,16,17];
其中可拿取到最多桃子的方式是:[16,16,17],合计为49。则猴子最多可以拿到49个桃子。
输入描述:
第一行输入两个正整数N和K(1≤N≤12,1≤K≤N),分别表示桃子的筐数和一共要拿取桃子的次数,正整数之间以一个空格隔开
第二行输入N个正整数(10≤正整数≤200),从左到右依次表示每筐桃子的数量,正整数之间以一个空格隔开
输出描述:
输出一个整数,如果有符合规则的拿去方式,输出猴子最多可以拿到的桃子数量,否则输出0
样例输入:
4 3
16 12 16 17
样例输出:
49
评分标准:
5分:能正确输出第一组数据;
5分:能正确输出第二组数据;
5分:能正确输出第三组数据;
5分:能正确输出第四组数据;
5分:能正确输出第五组数据;
5分:能正确输出第六组数据。
测试用例:
|
输入 |
4 1 14 16 17 17 |
5 3 14 14 13 12 10 |
8 3 13 18 20 15 14 19 17 16 |
|
输出 |
17 |
0 |
51 |
|
输入 |
11 3 133 179 209 155 140 195 174 164 160 110 131 |
||
|
输出 |
521 |
||
|
输入 |
3 2 209 215 165 |
||
|
输出 |
424 |
||
|
输入 |
12 5 132 113 126 161 149 150 155 155 130 130 173 189 |
||
|
输出 |
822 |
||
//第一道-编程题using namespace std;int main(){int n, ans = 0;cin >> n;while (n > 0){ans++;n /= 10;}cout << ans;return 0;}//第二道-编程题using namespace std;int main(){string s;cin >> s;for (int i = 0; i < s.size(); i++){if (i % 2 == 0)cout << s[i];else if (s[i] == 'W')cout << 'M';else cout << 'W';}return 0;}//第三道-编程题using namespace std;struct Player{int id;int score;} player[51];bool cmp(Player a, Player b){if (a.score != b.score)return a.score > b.score;elsereturn a.id < b.id;}int main(){int n;cin >> n;for (int i = 0; i < n; i++){cin >> player[i].id >> player[i].score;}sort(player, player + n, cmp);for (int i = 0; i < n; i++){cout << player[i].id << ' ' << player[i].score << endl;}return 0;}//第四道-编程题using namespace std;int dis[102];int main(){int d, n, ans = 0;cin >> d >> n;bool f = false;int curr_d = 0;for (int i = 1; i < n; i++){cin >> dis[i];}for (int i = 1; i < n; i++){if (dis[i] > d){f = true;break;}if (curr_d >= dis[i]){curr_d -= dis[i];}else{curr_d = d - dis[i];ans++;// cout << " gas: " << i << endl;}// cout << "curr_d: " << curr_d << endl;}if (curr_d < 0)ans++;if (!f)cout << ans;elsecout << -1;return 0;}//第五道-编程题using namespace std;const int N = 20;int a[N+1];bool vis[N+1];int f[N+1];int maxs = 0;bool hasr = false;void output(int k){for(int i = 1; i <= k; i++){cout << f[i] << ' ';}cout << endl;}void dfs(int n, int k, int lstp, int t, int s){int maxsum = 0;if (t > k){if (s > maxs)maxs = s;// output(k);hasr = true;return;}for (int i = lstp+1; i <= n; i++){if(a[i] < a[lstp]) // 下降,跳过continue;if(vis[i]) // 已选,跳过continue;// if(t + a[i] < maxs) // 和比最大值小,跳过// continue;vis[i] = true;f[t] = a[i];dfs(n, k, i, t + 1, s + a[i]);f[t] = 0;vis[i] = false;}return;}int main(){int n, k;int f = false;cin >> n >> k;for(int i = 1; i <= n; i++){cin >> a[i];}dfs(n, k, 0, 1, 0);if(hasr)cout << maxs;elsecout << 0;return 0;}/*4 32 3 3 44 34 3 3 24 34 3 3 34 34 3 3 414 313 7 9 16 38 24 37 18 44 19 21 22 63 154 316 12 16 174 114 16 17 17175 314 14 13 12 1008 313 18 20 15 14 19 17 165111 3133 179 209 155 140 195 174 164 160 110 1315213 2209 215 16542412 5132 113 126 161 149 150 155 155 130 130 173 189822*/
更多资料,请移步至知识星球。









暂无评论内容