一、单选题
1、C++程序的基本模块是( )。
A 标识符
B、
表达式
C、
语句
D、 函数
2、以下一维数组定义中,哪一个语法不正确?( )
A、
int a[]={1,2,3};
B、
int a[10]={1};
C、 int a[];
D、
int a[5];
3、执行以下代码,输出的结果是( )。
#include<iostream> using namespace std; int func(int x) { if (x <= 3) return x * 2 - 1; else if (x >= 6) return func(x - 3) - 2; else return func(x + 1) + x; } int main() { cout << func(14); return 0; }
A 2
B 4
C 6
D -1
4、已知:int i[5],*p=i;那么执行cout<<p+2;语句后,可以输出( )。
A、
i[2]的值
B、 i[2]的地址
C、
i[3]的值
D、
i[5]的地址
5、执行下面的程序,当输入的内容为“Hello world”时,输出的结果是 ( )。
char s[15];
cin >> s;
cout<<strlen(s);
A 5
B 10
C 11
D 15
二、实操题
6、求十位数字
题目描述:
给定一个正整数N(1<N<1011),输出正整数十位上的数字。
输入描述:
输入一个正整数N(1<N<1011)
输出描述:
输出正整数十位上的数字
样例输入:
123
样例输出:
2
参考答案:给定一个正整数N(1<N<1011),输出正整数十位上的数字。
7、寻宝石
编程实现:
有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
参考答案:br />```pythonN = int(input())gem_nums = list(map(int, input().split()))max_sum = max_start = max_end = 0for i in range(N - 2):cur_sum = gem_nums[i] + gem_nums[i + 1] + gem_nums[i + 2]if cur_sum > max_sum:max_sum = cur_summax_start = imax_end = i + 2print(max_sum)```
8、移动石子
题目描述:
将N(1<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
参考答案:对于这个问题,我们可以使用贪心的策略来解决。首先,我们计算每堆石子的平均值,即石子总数除以堆数。然后,我们遍历每堆石子,如果当前石子的数量大于平均值,我们就从当前堆中取出多余的石子,放到它相邻的堆中,直到当前堆的石子数量等于平均值。如果当前堆的石子数量小于平均值,我们就从相邻的堆中取石子放到当前堆中,直到当前堆的石子数量等于平均值。具体的步骤如下:1. 计算石子的平均值avg = total / N,其中total为石子总数,N为堆数。2. 初始化移动的石子数量为0。3. 遍历每堆石子,如果当前堆的石子数量大于平均值,就从当前堆中取出石子放到相邻的堆中,移动的石子数量加1。如果当前堆的石子数量小于平均值,就从相邻的堆中取石子放到当前堆中,移动的石子数量加1。4. 返回移动的石子数量。
9、花坛
题目描述:
小明有一张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
参考答案:```#include
10、公园树木
题目描述:
某公园有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
参考答案:对于给定的树的高度序列,我们需要找到最少去掉的树的数量,使得剩下的树的高度从左至右呈现先递增再递减的规律。首先,我们需要找到最高的树,并确定它的位置。然后,我们需要检查最高树左侧和右侧的树是否满足递增和递减的规律。如果最高树左侧的所有树中后一棵树都要比前一棵树高,且最高树右侧的所有树中后一棵树都要比前一棵树矮,那么我们就可以确定剩下的树呈现先递增再递减的规律。如果最高树左侧或右侧的树不满足递增或递减的规律,那么我们就需要去掉一些树,使得剩下的树满足规律。为了找到最少去掉的树的数量,我们可以从最高树开始,向两侧扩展,找到需要去掉的树。具体步骤如下:1. 找到最高的树,并记录它的位置。2. 检查最高树左侧和右侧的树是否满足递增和递减的规律。3. 如果满足规律,直接输出0,表示不需要去掉任何树。4. 如果不满足规律,从最高树开始,向两侧扩展,找到需要去掉的树,并计算去掉的树的数量。对于样例输入,最高树的位置是6,它的左侧和右侧的树不满足递增和递减的规律,需要去掉一些树。从最高树开始,向左侧扩展,需要去掉的树的位置是2、5、8、10,一共需要去掉4棵树。因此,最少去掉4棵树才能使这排树呈现先递增再递减的规律。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!