美团2024第一场笔试编程真题与数组专项练习(9月12日)

1.美团2024届第一场笔试编程真题

小美的外卖订单

小美正在设计美团外卖的定价信息。已知外卖定价的规则如下:

  1. 每道菜有折扣价和原价。折扣价不能超过原价。
  2. 订单有满xx元减yy元的优惠。当购买的菜的价格总和不小于xx元时,总价格可以减yy元。“减”的价格不能超过“满”的价格。
  3. 满减优惠和折扣价是互斥的,当且仅当每个菜都选择了原价才可以触发满减。
  4. 系统会自动为客户计算最低价格的方案。

在设计定价时,原价、折扣价和满减的价格都必须是正实数。如果设计的定价发生问题,则会提示数据错误。
请使用等价划分法设计测试用例,来测试该系统的功能。
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M

输入描述:
第一行输入一个正整数n,代表菜的总数。
接下来的n行,每行输入两个实数a_i和b_i,代表每道菜的原价是a_i,折扣价是b_i。
最后一行输入两个实数x和y,代表满x元可以减y元。

1<=n<=10000
数据中所有实数的绝对值不超过1000。

输出描述:
如果数据有误,则输出一行字符串"error"。
否则输出一个小数,小数点后保留2位即可。该小数代表顾客购买了全部菜各一份时,订单的总价格。

这题其实很好处理,将总和存起来,然后与满减价格比较,分别计算出满减价格和折扣价格,比较再输出,但是值得注意的是printf输出数据类型要注意,看你对printf函数了不了解了。

#include 
#include 
using namespace std;

int main() {
	int n;
	cin >> n;
	vector a(n);
	vector b(n);

	double as = 0;
	double bs = 0;

	for (int i = 0; i < n; ++i) {
		cin >> a[i] >> b[i];
		as += a[i];
		bs += b[i];
		if(a[i] <= 0 ||  b[i] <= 0 || a[i] < b[i]){
			cout << "error" << endl;
			return 0;
		}
	}
	double x, y;
	cin >> x >> y;
	if (x <= 0 | y <= 0 || x < y) {
		cout << "error" << endl;
		return 0;
	}
	if (as > x) {
		as -= y;
	}
	if(as>bs) printf("%.2f",bs);
    else printf("%.2f",as);
}

小美的字符串匹配度
小美有两个长度为nn只包含小写字母的字符串ss和tt,小美定义“两个字符串的匹配度”为i∈[1,n]i∈[1,n]中si=tisi​=ti​的数量,例如"abacd"和"aabdd"的匹配度就是2。

现在你可以进行最多一次以下操作:
对于字符串tt,选择两个索引i,j(1≤i

小美想知道,ss和tt的最大字符串匹配度是多少?
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M

输入描述:
第一行输入一个整数n(2 \leq n \leq 1000)
第二行输入一个长度为n的字符串s。
第三行输入一个长度为n的字符串t。

输出描述:
输出一个整数,s和t的最大匹配度。

暴力枚举,双循环进行交换,但是要注意,每次交换之后要将其复原,此外也要注意给变量初始化。

#include 
using namespace std;

int main() {
    int n,fzd=0,temp=0;
    string a,b;
    cin>>n;
    cin>>a>>b;
    for(int i=0;i

2.数组专项练习

1.若要对data类中重载的加法运算符成员函数进行声明,下列选项中正确的是?
A Data operator+(Data);
B Data operator(Data);
C operator+(Data,Data);
D Data+(Data);

这道题目选A,是一个重载运算符的题目。
运算符重载的格式:
返回值类型 operator 运算符名称 (形参表列){//TODO:}
由于是在 Data 类中对加法运算符重载,所以参数只需要一个,并且是 Data 类型。
运算完后,要得到运算后的新数据,所以返回值也是 Data 类型。

2.以下程序程序运行后的结果是( )

#include 
#define N 4
 
void fun(int a[][N], int *p) {
    int i;
    for (i = 0; i < N; i++) {
        if (i < 3)
            p[i] += a[i][i] - a[i][N - i - 2];
        else
            p[i] += a[i][i] - a[i][N - i];
    }
}
 
main() {
    int x[N][N] = {{3, 6, 2, 0}, {2, 8, 7, 9}, {5, 1, 7, 3}, {9, 5, 3, 7}},
        y[N] = {3, 5, 8, 6}, i;
    fun(x, y);
    for (i = 0; i < N; i++)
        printf("%d ", y[i]);
    printf("\n");
}

A 4 5 8 10
B -3 -1 1 3
C 4 5 10 8
D 1 3 -1 -3

这题选择C,一个一个的代入即可。

3.下述有关虚函数和纯虚函数说法错误的是()
A 被virtual关键字修饰的成员函数,就是虚函数
B 在基类中实现纯虚函数的方法是在函数原型后加"=0",virtual void funtion1()=0
C 同时含有纯虚拟函数的类称为抽象类,它可以被实例化,但是对象不可以调用纯虚函数
D 使用纯虚函数的意义是在很多情况下,基类本身生成对象是不合情理的

这题选择C,含有纯虚函数的类是不能实例化的。

4.c/c++中,有关纯虚函数说法正确的是( )
A 子类中必须覆盖基类的纯虚函数
B 含有纯虚函数的类不能被实例化
C 子类中必须覆盖基类的虚函数
D 含有纯虚函数的类一定是抽象类

这题选BD,我只选了D,没看到是多选,还是要注意审题,注意含有纯虚函数的类是不能实例化的,而且一定是抽象类。

谢谢阅读!

你可能感兴趣的:(学习,笔记,算法,c++)