编程题
第一题(难度系数2,15 个计分点)
题目编号:23011501CB01 知识点:运算符
编程实现:求十位数字
题目描述:
给定一个正整数N(1<N<1011),输出正整数十位上的数字。
输入描述:输入一个正整数N(1<N<1011)
输出描述:输出正整数十位上的数字
样例输入:123
样例输出:2
评分标准:
3分:能正确输出第一组数据;
3分:能正确输出第二组数据;
3分:能正确输出第三组数据;
3分:能正确输出第四组数据;
3分:能正确输出第五组数据。
测试用例:
|
输入 |
200 |
101 |
111111 |
123456789 |
2020202020 |
|
输出 |
0 |
0 |
1 |
8 |
2 |
第二题(难度系数 3,18 个计分点)
题目编号:23011501CB02 知识点:循环 判断
题目描述:寻宝石
编程实现:
有N(1<N<100)个盒子排成一排,每个盒子都放有宝石。请找出3个连续的盒子,使得3个盒子中的宝石数量之和最多。
例如:N = 5,盒子中的宝石数量依次为6、2、4、5、1。
3个连续的盒子共有3组,分别为(6,2,4)、(2,4,5)、(4,5,1),宝石数量之和最多是(6,2,4),宝石数量为12。
输入描述:
第一行输入一个正整数N(1<N<100),表示这排盒子的数量
第二行输入N个正整数(1≤正整数<100),表示盒子中依次放有的宝石数量,正整数之间以一个空格隔开
输出描述:
输出一个整数,表示3个连续的盒子最多的宝石数量
样例输入:
5
6 2 4 5 1
样例输出:
12
评分标准:
3分:能正确输出第一组数据;
3分:能正确输出第二组数据;
3分:能正确输出第三组数据;
3分:能正确输出第四组数据;
3分:能正确输出第五组数据;
3分:能正确输出第六组数据。
测试用例:
|
输入 |
5 35 17 11 20 10 |
7 2 3 1 4 2 5 8 |
10 2 13 15 6 11 12 1 16 17 14 |
17 1 20 2 18 4 13 16 12 8 15 11 3 8 12 34 50 2 |
|
输出 |
63 |
15 |
47 |
96 |
|
输入 |
11 9 83 40 37 59 90 18 9 10 58 21 |
25 17 51 66 92 89 57 89 13 87 42 92 9 75 23 97 29 75 93 63 20 72 77 40 51 84 |
||
|
输出 |
186 |
247 |
||
第三题(难度系数 3,25 个计分点)
题目编号:23011501CB03 知识点:循环 判断
编程实现:移动石子
题目描述:
将N(1 <N<50)堆石子围成一个圆圈,已知每堆石子的数量,且石子的总数量能被N整除。请按照如下要求移动石子,使得N堆石子的数量变为相同。< span>
</N<50)堆石子围成一个圆圈,已知每堆石子的数量,且石子的总数量能被N整除。请按照如下要求移动石子,使得N堆石子的数量变为相同。<>
要求:可以从每堆石子中拿取石子移动到它左右相邻的两堆石子堆中。
计算出要使得N堆石子的数量变为相同,至少需要移动多少颗石子。
例如:N = 3,3堆石子顺时针方向的数量依次为2、6、7。最少需要移动3颗石子,N堆石子的数量变为相同,每堆5颗。
第1次从第一堆石子中拿1颗移动到第一堆的石子中,此时3堆石子的数量依次为3、5、7;
第2次从第三堆石子中拿2颗移动到第一堆的石子中,此时3堆石子的数量依次为5、5、5。
输入描述:
第一行输入一个正整数N(1<N<50),表示石子的堆数
第二行输入N个正整数(1<正整数<100),表示顺时针方向每堆石子的原始数量,正整数之间以一个空格隔开
输出描述:
输出一个整数,表示要使N堆石子的数量变为相同,最少移动的石子数量,如果原始N堆石子数量相同,则输出0
样例输入:
3
2 6 7
样例输出:
3
评分标准:
3分:能正确输出第一组数据;
3分:能正确输出第二组数据;
3分:能正确输出第三组数据;
3分:能正确输出第四组数据;
4分:能正确输出第五组数据;
4分:能正确输出第六组数据。
测试用例:
|
输入 |
4 1 2 5 4 |
7 2 3 1 4 2 3 6 |
10 2 13 15 9 11 12 1 16 17 14 |
17 7 20 2 18 4 13 16 12 10 15 11 4 8 12 34 50 2 |
|
输出 |
4 |
7 |
29 |
184 |
|
输入 |
11 15 83 40 37 59 90 18 9 10 58 21 |
25 17 51 66 92 89 57 86 13 87 42 92 9 75 23 97 29 75 93 63 20 72 77 40 51 84 |
||
|
输出 |
221 |
486 |
||
第四题(难度系数4,30个计分点)
题目编号:23011501CB04 知识点:二维
编程实现:花坛
题目描述:
小明有一张N*M(2≤N≤30,2≤M≤30)的方格纸,且每个小方格都是正方形,纸上的每个小方格中都画了一个花朵,共有a、b、c三种不同的花朵。为了美观现按照以下要求为花朵涂色。
要求:
1)涂色的花朵区域必须是一个正方形矩阵,最小为一个2*2的正方形矩阵;
2)正方形矩阵中的花朵必须是同一种花朵;
3)只要正方形矩阵四个顶点不重合就算作不同的正方形矩阵(有部分区域重叠或者大正方形矩阵包含小正方形矩阵,按不同的正方形矩阵计算)。
已知方格纸的行数N(2≤N≤30)和列数M(2≤M≤30),及每个小正方形方格中花朵的种类,请帮助小明计算出,按要求有多少个正方形矩阵需要涂色。
例如:N=4,D = 5,矩阵如下图:
其中有3个正方形矩阵需要涂抹颜料(蓝色框区域和绿色区域的矩阵部分重叠按2个计算)。
输入描述:
第一行输入两个正整数N(2≤N≤30)和M(2≤M≤30),N表示矩阵方格的行数,M表示矩阵方格的列数,两个正整数之间以一个空格隔开
第二行开始输入N行,每行M个字符(字符只包含a、b、c),字符之间以一个空格隔开
输出描述:
输出一个整数,表示N*M的矩阵方格纸中,需要涂抹颜料正方形矩阵的个数
样例输入:
4 5
b b c b a
b b a c b
c b a a a
a b a a a
样例输出:
3
评分标准:
4分:能正确输出第一组数据;
4分:能正确输出第二组数据;
4分:能正确输出第三组数据;
4分:能正确输出第四组数据;
4分:能正确输出第五组数据;
5分:能正确输出第六组数据。
测试用例:
|
输入 |
3 4 c a b b c b c c c a c c |
4 2 c c c c c a b b |
5 5 a b a a b c a a a c c b c c c c a b c c b b a b b |
5 8 b c b b a b a b c a c c c a b c b a c c c c a b b c c c c a c c a c b c a c b c |
9 11 b c b c a a a b b a b c a c a b c a b a b a a b b a b b b b c a b b c c a b b b b a c c a c b c b b b a a b a c a c a b a b c b c a c c b a c c a b c b c c a c b a b a a c b c a c b c a c b a b c b |
15 21 b c b b b b a b b b b c b a a b b c b a b c a b a b c b b b b b a b a b b a c a b a a b b a b b a c b a b b a b b b a b c b b b b b b b b c c b c b c a b b b a b b b b b c b c a b b b b c b c b b b a a b b a a c a c a b a a c b a b b c a b b b a b a c b c b c a c a c c b b b c a b a c b a b c c a b a b c b b b b b a b a b b a c a b a c a c c a c c b a c a b b a b a a c b b c c a c b a b b c b c a b a b b b a b a a b b c b c a b b b b c b c b b b a a b b a a b b a b a b b a c a b a b c b c a b b b b b c b b b b a b b b b c b a a b b c b a b a a a c b a b b c a c a b b a b a a c a c b c b c a c a c c b b b c a b a c b a b c |
|
输出 |
1 |
1 |
2 |
5 |
6 |
14 |
第五题(难度系数 5,35 个计分点)
题目编号:23011501CB05 知识点:递增递减数列
编程实现:公园树木
题目描述:
某公园有N(3≤N≤50)棵树排成一排,已知每棵树的高度。现要去掉一些树,使得剩下树的高度从左至右呈现先递增再递减的规律(即剩余的树中仅有一棵最高的树,且它左侧的所有树中后一棵树都要比前一棵树高,它右侧的所有树中后一棵树都要比前一棵树矮)
给出N棵树的高度(高度单位:m,1.0≤每棵树高度≤100.0,保留一位小数),请你计算出最少去掉几棵树才能使这排树呈现先递增再递减的规律,如果不能呈现则输出-1(只有递增或者只有递减都为不能呈现)。
例如:N=10,10棵树的高度从左到右依次为1.0、2.3、1.2、1.7、1.1、2.0、1.8、1.8、1.2、1.9。
要使这排树呈现先递增再递减的规律,最少去掉4棵树,去掉的编号分别为2、5、8、10。
剩余树的高度依次为1.0、1.2、1.7、2.0、1.8、1.2,最高树为2.0,其左侧树的高度依次为1.0、1.2、1.7、2.0,呈现递增趋势(从左至右且包含最高树);其右侧树的高度依次为2.0、1.8、1.2,呈现递减趋势(从左至右且包含最高树)。
输入描述:
第一行输入一个正整数N(3≤N≤50),表示这排树的数量
第二行输入N个数(1.0≤每个数≤100.0,保留一位小数),表示每棵树的高度,每个数之间以一个空格隔开
输出描述:
输出一个整数,表示最少去掉几棵树才能使这排树呈现先递增再递减的规律,如果不能呈现则输出-1
样例输入:
10
1.0 2.3 1.2 1.7 1.1 2.0 1.8 1.8 1.2 1.9
样例输出:
4
评分标准:
5分:能正确输出第一组数据;
5分:能正确输出第二组数据;
5分:能正确输出第三组数据;
5分:能正确输出第四组数据;
5分:能正确输出第五组数据;
5分:能正确输出第六组数据。
测试用例:
|
输入 |
4 |
4 |
|
输出 |
1 |
-1 |
|
输入 |
8 75.6 2.8 33.6 65.7 14.1 50.1 4.9 24.8 |
|
|
输出 |
3 |
|
|
输入 |
13 37.7 77.7 2.7 15.6 39.9 3.8 71.0 21.8 26.7 19.7 74.2 20.2 37.5 |
|
|
输出 |
7 |
|
|
输入 |
8 18.6 18.6 15.0 20.0 16.0 13.0 19.7 22.0 |
|
|
输出 |
4 |
|
|
输入 |
18 2.8 4.3 5.5 7.6 2.2 4.4 6.9 2.3 2.5 7.6 2.5 6.5 3.4 1.2 2.3 5.4 2.2 3.0 |
|
|
输出 |
9 |
|
//第一道-编程题using namespace std;int main(){long long i;cin >> i;cout << (i / 10 % 10);return 0;}//第二道-编程题using namespace std;int a[101];int main(){int n;cin >> n;for (int i = 0; i < n; i++){cin >> a[i];}int s = a[0] + a[1] + a[2];for (int i = 1; i < n - 2; i++){s = max(s, a[i] + a[i+1] + a[i+2]);}cout << s;return 0;}//第三道-编程题using namespace std;int a[120], b[51];int main(){int n, sum1 = 0, avg = 0;cin >> n;for (int i = 0; i < n; i++){cin >> a[i];sum1 += a[i];a[i + n] = a[i];}avg = sum1 / n;int maxc = 50000;for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){b[j] = a[i+j];}// cout << endl << " b[j] " << endl;// for (int j = 0; j < n; j++)// {// cout << b[j] << ' ';// }int cnt = 0;for (int j = 0; j < n -1 ; j++){cnt += abs(b[j] - avg);b[j+1] += b[j] - avg;b[j] = avg;}maxc = min(maxc, cnt);}// for (int i = 0; i < n; i++)// {// for (int j = 0; j < n; j++)// {// b[j] = a[i+j];// }// int cnt = 0;// for (int j = n-1; j >= 1; j--)// {// cnt += abs(b[j] - avg);// b[j-1] += b[j] - avg;// b[j] = avg;// }// maxc = min(maxc, cnt);// }cout << maxc;return 0;}//第四道-编程题using namespace std;const int N = 30;char a[N+1][N+1];int main(){int n, m, cnt = 0;cin >> n >> m;for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){cin >> a[i][j];}}for (int e = 2; e <= min(m, n); e++){for (int i = 0; i <= n-e; i++){for (int j = 0; j <= m-e; j++){bool f = true;for (int x = 0; x < e; x++){for (int y = 0; y < e; y++){if (a[i][j] != a[i+x][j+y]){f = false;break;}// cout << "i:" << i << " j: " << j << " a[i][j] : " << a[i][j] << " = a[i+x][j+y]:" << a[i+x][j+y] << endl;}if (!f){break;}}if (f){// cout << "i:" << i << " j: " << j << " e: " << e << endl;cnt++;}}}}cout << cnt;return 0;}//第五道-编程题using namespace std;int f1[51], f2[51];double t[51];int main(){int n;cin >> n;for (int i = 0; i < n; i++){cin >> t[i];f1[i] = 1;f2[i] = 1;}int cnt = 0, maxlen_i = 0, maxlen_d = 0;for (int i = 0; i < n; i++){int maxl_i = 1;for (int j = 0; j < i; j++){if (t[j] < t[i])maxl_i = max(maxl_i, f1[j] + 1);}f1[i] = maxl_i;maxlen_i = max(maxlen_i, maxl_i);}for (int i = n-1; i >= 0; i--){int maxl_d = 1;for (int j = n-1; j > i; j--){if (t[j] < t[i])maxl_d = max(maxl_d, f2[j] + 1);}f2[i] = maxl_d;maxlen_d = max(maxlen_d, maxl_d);}int maxcnt = f1[0] + f2[0];for (int i = 1; i < n; i++){maxcnt = max(maxcnt, f1[i] + f2[i]);}if (maxlen_d == n or maxlen_i ==n)cout << -1;elsecout << (n - maxcnt + 1);return 0;}
更多资料,请移步至知识星球。









暂无评论内容