【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
还有很多,暂时先了解这么多,其他的可以在下面链接中好好看看。
【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函数也需要了解内部实现原理