美团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 <iostream>
#include <vector>
using namespace std;

int main() {
	int n;
	cin >> n;
	vector<double> a(n);
	vector<double> 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<j≤n)i,j(1≤i<j≤n),交换titi​和tjtj​。

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

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

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

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

#include <iostream>
using namespace std;

int main() {
    int n,fzd=0,temp=0;
    string a,b;
    cin>>n;
    cin>>a>>b;
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            char c=a[i];
            a[i]=a[j];
            a[j]=c;
            for(int m=0;m<n;m++){
            if(a[m]==b[m]) fzd++;
            if(temp<fzd) temp=fzd;
            }
            fzd=0;
            char c1=a[j];
            a[j]=a[i];
            a[i]=c1;
        }  
    }
    cout<<temp;
}

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 <stdio.h>
#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,没看到是多选,还是要注意审题,注意含有纯虚函数的类是不能实例化的,而且一定是抽象类。

谢谢阅读!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值