笔试题目练习【2022携程秋招】

【2022携程秋招第五批】

1. 题目:xx拿到了两个正整数a和b,请你告诉她a∗b有哪些因子。

输入描述:

两个正整数a,b.  1≤a,b≤

输出描述:

第一行输出一个正整数n,代表a*b的因子数量。
第二行输出n个正整数,代表a*b的所有因子,从小到大排列。

示例1

输入例子: 

6 2

输出例子:

6
1 2 3 4 6 12
#include <iostream>
#include<vector>
#include<set>
using namespace std;

set<long long>mp;
void solve(int a ,vector<int>& v){
    for(int i=1;i*i<=a;i++){
        if(a%i==0){
            v.push_back(i);
            v.push_back(a/i);
        }
    }
}

int main() {
    int a, b;
    cin>>a>>b;
    vector<int> av,bv;
    solve(a,av);
    solve(b,bv);
    for(int i:av){
        for(int j:bv){
            mp.insert(i*j);
        }
    }
    cout<<mp.size()<<endl;
    for(auto i:mp){
        cout<<i<<" ";
    }
    cout<<endl;

    
}

(完全照抄牛客一位同学的回答,这里只是备注下,怕忘记)

int a, b;

cin>>a>>b;

int num = a*b;

之前做这道题的时候下意识,直接将两个输入值进行乘法运算并赋值

结果是不对的

看了这位同学的答案之后发现,这道题是对两个输入值做处理,构造函数,各自求出因子之后,再输出答案的。

还是基础不好的原因,平地起高楼了属于是。

5. 题目:

查询单日多次下订单的用户信息?

现有某公司部分订单数据及用户会员等级数据,如下所示:

订单信息表:order_tb(订单id-order_id,用户id-user_id,订单金额-order_price,订单创建时间-order_time)

会员等级信息表:uservip_tb(用户id-user_id,会员等级-vip,积分-point)

请查询单日下单多次的用户信息?
要求输出:订单日期,user_id,下单次数,会员等级
注:单日多次下订单指该日同一用户下单次数大于1次,结果按照下单次数降序排序

示例数据结果如下:

结果解释:

user_id为12的用户在9月2日分别下了order_id为105、106的订单,故结果如上。

select
    date(a.order_time) order_date,
    a.user_id,
    count(order_id) order_nums,
    b.vip
from
    order_tb a
left join
    uservip_tb b
on a.user_id=b.user_id
group by
    a.user_id,date(a.order_time)
having
    count(a.order_id)>1
order by
    count(a.order_id) desc

注意点:1. 区别什么时候用where,什么时候用having;

               2. 查找信息中包含日期时,用什么函数,以及要求的格式要注意。

where和having的区别:

1、where一定在group by 之前,having一般在group by 之后;

2、where后的条件表达式里不允许使用聚合函数,而having可以;

3、having 子句中的每一个元素也必须出现在select列表中(有些数据库例外,如Oracle)(此时having的要求无法达到,可以选择where的方式对条件进行限定)

搬运链接:

 where、group by、 having 的用法_group by where用法-CSDN博客

常用的日期函数:

1. now()  获取当前日期加时间

select now()  //2023-09-29 07:34:23

2. curdate()  获取当前日期

select curdate() //2023-09-29

3. curtime()  获取当前时间

select curtime  //07:34:23

4. date()  将字符串转为日期

select date('2023-09-29')  //2023-09-29

5. year() 获取日期年份

select year('2023-09-29')  //2023

6. yearweek() 获取年份加周数

select yearweek(date('2023-09-29'))  //202339

还有很多,暂时先了解这么多,其他的可以在下面链接中好好看看。

MySQL中常用的日期函数 (baidu.com)

【2022携程秋招第四批】

1. 题目:

游游拿到了一个正整数x,她希望把这个整数的前k位进行翻转。

输入例子:

123 2

输出例子:

213

例子说明:

将前两位反转后,12变成了21。正整数变成了213。

示例2

输入例子:

80407 4

输出例子:

4087

例子说明:

将前4位翻转,变成0408,连起来后去除前导零为4087。
#include <iostream>
#include<string>
using namespace std;


void reverseString(string s) {
    for (int i = 0, j = s.size() - 1; i < s.size()/2; i++, j--) {
        swap(s[i],s[j]);
    }
}

int main(){
    int x,k;
    cin>>x>>k;
    string str = to_string(x);
    for(int j=0,l=k-1;j<k/2;j++,l--){
        swap(str[j],str[l]);
    }
    //字符串转换为整型数值的函数,头文件为#include<string>
    cout<<stoi(str)<<endl;
}

注意点:1. 数字转换为字符串之后,翻转数字其实是翻转字符串

-》翻转函数reverse   一定要会写这个函数,了解函数內部的原理,才能更好的使用它;

2. 数字转换为字符串之后,对于翻转后的字符串,可能回存在前面几个字符是‘0’字符

-》使用stoi函数:完美完成字符串转换为整型数值  同样stoi函数也需要了解内部实现原理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值