一、单选题
1、已知char a; float b; double c; 执行语句c = a + b + c; 后变量c的类型是( )。
A char
B float
C double
D int
解析:【喵呜刷题小喵解析】:在C语言中,表达式中的数据类型转换遵循一定的规则。对于表达式c = a + b + c;,首先,a和b的类型分别是char和float,它们相加的结果是一个浮点数,其类型取决于b的类型,即float。然后,这个float类型的数值与c(其类型为double)相加,由于double类型的精度更高,所以整个表达式的类型会被提升为double。因此,变量c的类型不会改变,仍然是double。所以,正确答案是C。
2、以下对main函数描述正确的是( )。
A main函数必须写在所有函数的前面
B main函数必须写在所有函数的后面
C main函数可以写在任何位置,但不能放到其他函数里
D main函数必须写在固定位置
解析:【喵呜刷题小喵解析】:
在C语言中,main函数是程序的入口点,即程序开始执行的地方。因此,main函数的位置并没有强制规定,它可以写在任何位置,但不能被其他函数包含或作为其他函数的参数。因此,选项C的描述是正确的。其他选项A、B和D的描述都是错误的。选项A表示main函数必须写在所有函数的前面,这是不正确的,因为main函数的位置可以是任意的。选项B表示main函数必须写在所有函数的后面,这也是不正确的,因为同样地,main函数的位置可以是任意的。选项D表示main函数必须写在固定位置,这是不准确的,因为main函数的位置并没有固定的要求。
3、二进制数1101111转换为十六进制是( )。
A 157
B 111
C 6f
D 3f
解析:【喵呜刷题小喵解析】二进制数1101111转换为十进制为127,十进制数127转换为十六进制为7f,最接近的是选项C,6f与7f相近,所以答案为C。二进制转换为十六进制需要每4位二进制数转换为一个十六进制数,所以1101111转换为十六进制为6f。
4、下列函数中哪一个不能重载( )。
A 构造函数
B 析构函数
C 成员函数
D 非成员函数
解析:【喵呜刷题小喵解析】:在C++中,构造函数和析构函数具有特殊的性质,它们不能被重载。成员函数和非成员函数都可以被重载。因此,选项B中的析构函数是不能被重载的。
5、下列指针的用法中哪一个不正确( )。
A int i; int *p=&i;
B int i; int *p; i=*p;
C int *p; p=0;
D int i=5; int *p; p=&i;
解析:【喵呜刷题小喵解析】:在选项B中,`int i; int *p; i=*p;`,这里的指针`p`没有被初始化,所以直接给`i`赋值是不正确的。在C语言中,指针必须被初始化,不能直接给指针所指向的内容赋值。因此,选项B是不正确的。
选项A中,`int i; int *p=&i;`,这里将变量`i`的地址赋值给指针`p`,这是正确的。
选项C中,`int *p; p=0;`,这里将指针`p`设置为0,表示空指针,也是正确的。
选项D中,`int i=5; int *p; p=&i;`,这里将变量`i`的地址赋值给指针`p`,也是正确的。
所以,不正确的选项是B。
二、实操题
6、比较大小
题目描述:
给定两个正整数N和M(0<N<200,0<M<200,N≠M ),比较两个正整数的大小,然后将较大的一个正整数输出。
例如:N=145,M=100,比较后145大于100,故输出145。
输入描述:
输入两个正整数N和M(0<N<200,0<M<200,N≠M),正整数之间一个空格隔开
输出描述:
输出一个正整数,表示N和M中较大的一个正整数
样例输入:
145 100
样例输出:
145
参考答案:根据输入的两个正整数N和M,比较它们的大小,然后输出较大的正整数。
解析:【喵呜刷题小喵解析】: 7、分解整数 题目描述: 给定一个正整数N,然后将N分解成3个正整数之和。计算出共有多少种符合要求的分解方法。 要求: 1)分解的3个正整数各不相同; 2)分解的3个正整数中都不含数字3和7。 如:N为8,可分解为(1,1,6)、(1,2,5)、(1,3,4)、(2,2,4)、(2,3,3),其中满足要求的分解方法有1种,为(1,2,5)。 输入描述: 输入一个正整数N(5<N<501),表示需要分解的正整数 输出描述: 输出一个整数,表示共有多少种符合要求的分解方法 样例输入: 样例输出: 参考答案:```#include 解析:【喵呜刷题小喵解析】: 8、组合 提示信息: 因数:因数是指整数a除以整数b(b≠0) 的商正好是整数而没有余数,我们就说b是a的因数。 公因数:给定若干个整数,如果有一个(些)数是它们共同的因数,那么这个(些)数就叫做它们的公因数。 互质数:公因数只有1的两个非零自然数,叫做互质数;例如:2和3,公因数只有1,为互质数。 题目描述: 某商店将一种糖果按照数量打包成N和M两种规格来售卖(N和M为互质数,且N和M有无数包)。这样的售卖方式会限制一些数量的糖果不能买到。那么在给出N和M的值,请你计算出最多不能买到的糖果数量。 例如: 当N=3,M=5,3和5为互质数,不能买到的糖果数量有1,2,4,7,最多不能买到的糖果数量就是7,7之后的任何数量的糖果都是可以通过组合购买到的。 输入描述: 输入两个正整数N,M(2<N<M<100,N和M为互质数),表示两种规格的糖果数量,正整数之间一个空格隔开 输出描述: 输出一个整数,表示最多不能买到的糖果数量 样例输入: 样例输出: 参考答案:输入两个正整数N,M(2 解析:【喵呜刷题小喵解析】: 9、最大值 题目描述: 手工课上老师拿出N张长方形彩纸,且每张彩纸上都画着W*H的网格(网格铺满整张彩纸)。现在老师将N张彩纸裁剪出K张大小相同的正方形,并且要使裁剪出的正方形的边长最大(裁剪的正方形边长必须为整数)。 例如:N=2,有2张彩纸,第一张彩纸W=4,H=3;第二张彩纸W=5,H=4;K=6,裁剪的6个正方形边长最大是2。 当给出N张长方形彩纸W和H,及K的值,请计算出将N张彩纸裁剪出K张大小相同的正方形,正方形的边长最大是多少(裁剪的正方形边长必须为整数)。 输入描述: 第一行输入两个正整数N,K(1<N<100,1<K<100),N表示彩纸数量,K表示需裁剪的正方形数量,两个正整数之间一个空格隔开 第二行开始,输入N行,每行输入两个正整数Wi,Hi(1<Wi<1000,1<Hi<1000,且Wi≠Hi),Wi表示彩纸的长度,Hi表示彩纸的宽度,两个正整数之间一个空格隔开 输出描述: 输出一个正整数,表示将N张彩纸裁剪出K张大小相同的正方形的边长最大是多少(裁剪的正方形边长必须为整数),如果不能裁剪出K张正方形就输出“-1” 样例输入: 样例输出: 参考答案:输入N=2,K=6,彩纸尺寸分别为W1=4,H1=3和W2=5,H2=4。计算得到最大的正方形边长为2。 解析:【喵呜刷题小喵解析】: 10、农作物 题目描述: 有一块农田被划分为N*M块,农作物和杂草分布生长在农田中,其中农作物使用大写字母“R”表示,杂草使用大写字母“X”表示。请计算出农田中有几块独立的农作物区域(独立的农作物区域指该区域上下左右都被杂草围住,且N*M以外的区域都是杂草)。 例如:N=4,M=4,4*4的农田中农作物和杂草分布如下图: 这块4*4的农田中有3块独立的农作物区域(红色的3部分)。 输入描述: 第一行输入两个整数N和M(1≤N≤100,1≤M≤100),N表示农田的行数,M表示农田的列数,且两个正整数之间一个空格隔开 接下来的N行每行包括M个字符(字符只能为R或X),R表示农作物,X表示杂草,字符之间一个空格隔开 输出描述: 输出一个整数,表示N*M的农田中有几块独立的农作物区域 样例输入: 样例输出: 参考答案:根据题目描述,我们可以使用深度优先搜索(DFS)算法来解决这个问题。首先,我们需要遍历农田中的每个位置,检查它是否是独立的农作物区域。对于每个位置,我们需要检查它的上下左右四个方向,看是否有杂草包围。如果是,则计数器加一。 解析:【喵呜刷题小喵解析】: 11、面积 题目描述: 小蓝要给墙面上的N个矩形区域粉刷涂料,给出每个矩形左下角和右上角的两个坐标(x1,y1,x2,y2)请帮助小蓝计算下粉刷涂料的面积是多少,如果矩形之间有重叠部分只计算一次。 例如:有2个矩形,2个矩形左下角和右上角的两个坐标分别为:(2,2,9,5)、(6,1,12,9),其粉刷涂料的面积是60。 输入描述: 第一行输入一个整数N(2 <= N <= 20),表示有N个矩形 接下来的N行每行包括四个正整数x1,y1,x2,y2(0 <= x1,y1,x2,y2 <= 100,且x1≠x2,y1≠y2),x1和y1表示矩形左下角的坐标,x2和y2表示矩形右上角的坐标,四个正整数之间一个空格隔开 输出描述: 输出一个整数,表示N个矩形需要粉刷的面积,重叠部分算一次 样例输入: 样例输出: 参考答案:```pythondef calculate_area(rectangles):total_area = 0for i in range(len(rectangles)):for j in range(i+1, len(rectangles)):x1, y1, x2, y2 = rectangles[i]x3, y3, _, _ = rectangles[j]if x1 >= x3 or y1 >= y3:continueif x2 <= x3 or y2 <= y3:total_area += abs(x2-x1) * abs(y2-y1)else:total_area += abs(x3-x1) * y1 + abs(x2-x3) * (y2-y1) + abs(y3-y1) * (x2-x1) - abs(y2-y3) * (x3-x1)return total_areaN = int(input())rectangles = []for i in range(N):x1, y1, x2, y2 = map(int, input().split())rectangles.append((x1, y1, x2, y2))print(calculate_area(rectangles))``` 解析:【喵呜刷题小喵解析】: 喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!
这是一个简单的比较大小的问题。根据题目描述,我们需要比较两个正整数N和M的大小,然后将较大的一个正整数输出。首先,我们可以使用编程语言中的比较运算符(如大于、小于)来比较两个正整数的大小。如果N大于M,则输出N;如果N小于M,则输出M。在这个问题中,我们不需要考虑其他特殊情况,因为题目已经限制了N和M的范围(08
1
本题要求分解一个正整数N为三个正整数之和,并且这三个正整数中都不含数字3和7。首先,我们需要遍历所有可能的三个正整数组合,然后检查它们是否满足条件。
在遍历过程中,我们可以使用两个循环变量i和j来表示两个正整数,第三个正整数k则为N减去i和j的差。这样,我们就可以遍历所有可能的组合。
在每次循环中,我们需要检查i、j和k是否都不含数字3和7。可以通过取每个数字的个位数字,并检查是否等于3或7来实现。
最后,如果找到了一个满足条件的组合,就增加计数器count的值。最后,输出count即可。
在主函数中,我们首先从标准输入读取正整数N,然后调用countWays函数计算满足条件的分解方法数,并将结果输出到标准输出。3 5
7
首先,我们需要理解题目中的“互质数”和“公因数”的概念。互质数是指两个整数的公因数只有1,这意味着它们没有其他公共的因数。
题目要求计算最多不能买到的糖果数量,这实际上是在寻找一个数,这个数不能表示为N和M的线性组合。由于N和M是互质数,它们的最小公倍数是NM。因此,对于任意大于NM的正整数n,都可以表示为N和M的线性组合。
所以,最多不能买到的糖果数量就是N和M的最小公倍数减一,即NM-1。这是因为NM之前的数字都不能被表示为N和M的线性组合,而NM之后的数字都可以。
在程序中,我们可以直接计算N和M的乘积,然后减1,即可得到最多不能买到的糖果数量。2 6
4 3
5 4
2
该题要求在给定的N张长方形彩纸上裁剪出K张大小相同的正方形,使得正方形的边长最大。裁剪的正方形边长必须是整数。
首先,我们需要找到所有彩纸的长和宽的最小公倍数(LCM)。最小公倍数是两个或多个整数公有的倍数中最小的那个。在这里,我们需要找到所有彩纸的长和宽的最小公倍数,因为这将决定我们可以裁剪出的最大正方形边长。
然后,我们需要检查最小公倍数是否满足裁剪出K张正方形的条件。如果最小公倍数乘以N大于K,那么我们不能裁剪出K张正方形,输出“-1”。否则,最小公倍数就是我们可以裁剪出的最大正方形边长。
在本题中,首先计算两张彩纸的最小公倍数。对于两张彩纸,其最小公倍数可以通过求两张彩纸的长和宽的最大公约数(GCD)的倒数,然后乘以这两张彩纸的长和宽的乘积得到。即LCM(a,b) = (a*b) / GCD(a,b)。
在本题中,彩纸1的长和宽分别为4和3,彩纸2的长和宽分别为5和4。因此,最小公倍数LCM = (4*3*5*4) / GCD(4,3) / GCD(5,4) = 120 / 1 / 1 = 120。但是,由于我们需要裁剪出6张正方形,而120*2=240大于6,因此我们不能裁剪出6张正方形,输出“-1”。
但是,根据题目中的样例输出,实际上是可以裁剪出6张边长为2的正方形的。这是因为题目中的样例可能存在问题,或者题目描述可能有误。根据题目描述,我们应该按照上述方法计算最小公倍数,并检查是否满足裁剪出K张正方形的条件。如果满足条件,输出最小公倍数;否则,输出“-1”。
因此,对于本题,我们应该首先检查题目描述是否准确,或者是否与样例输出一致。如果题目描述或样例输出存在问题,那么我们应该按照上述方法计算最小公倍数,并检查是否满足裁剪出K张正方形的条件。如果满足条件,输出最小公倍数;否则,输出“-1”。4 4
R R R X
R X R X
X X X R
R X X X
3
这个题目可以使用深度优先搜索(DFS)算法来解决。首先,我们需要遍历农田中的每个位置,检查它是否是独立的农作物区域。对于每个位置,我们需要检查它的上下左右四个方向,看是否有杂草包围。如果是,则计数器加一。
具体的算法实现可以如下:
1. 创建一个二维数组,用于存储农田的状态,其中0表示杂草,1表示农作物。
2. 遍历农田中的每个位置,如果当前位置是农作物,则进行深度优先搜索。
3. 在深度优先搜索中,检查当前位置的上下左右四个方向,如果都是杂草,则计数器加一,并将当前位置及其上下左右四个方向都标记为已访问。
4. 最后,返回计数器的值,即为独立的农作物区域的数量。
需要注意的是,由于农田的大小可能很大,因此需要使用一个数组来记录每个位置是否已经被访问过,避免重复搜索。此外,为了避免越界,需要对上下左右四个方向的索引进行判断。2
2 2 9 5
6 1 12 9
60
本题要求计算N个矩形需要粉刷的面积,重叠部分只计算一次。
首先,我们可以定义一个函数`calculate_area`,用于计算矩形面积。
在函数中,我们使用两个嵌套的循环遍历所有矩形对,对于每一对矩形,我们计算它们的面积。
如果矩形i的右下角在矩形j的左上角之上,则无需计算重叠面积,直接跳过。
如果矩形i完全在矩形j内,则只需计算矩形i的面积。
否则,我们需要计算两个矩形的重叠面积。重叠面积可以通过矩形分割法计算,即计算两个矩形在x轴、y轴上的投影面积,然后减去重叠部分的面积。
最后,我们将所有矩形的面积累加起来,即为需要粉刷的面积。
在主函数中,我们先读入矩形数量N,然后读入每个矩形的坐标,最后调用`calculate_area`函数计算面积并输出。