蔚来7.21笔试

第一题添数博弈
#include <bits/stdc++.h>
using namespace std;
int getNum(int x,int y){
    int z = y;
    while(x%y){
        z = x%y;
        x = y;
        y = z;
    }
    return z;
}
int main(){
    int n;
    int x,y;
    for(int i=0;i<n;++i){
        cin>>x>>y;
        int maxNum = max(x,y);
        int minNum=min(x,y);
        if((maxNum/getNum(maxNum,minNum))%2==0){
            cout<<"B"<<endl;
        }else{
            cout<<"A"<<endl;
        }
    }
    return 0;
}
/*测试用例
2
4 1
5 2
*/
第二题:思路为将该问题转化为背包问题进行求解

#include <iostream>
#include <vector>
#include <algorithm>
#include <tuple>
using namespace std;

int main() {
	int n, k;
	cin >> n >> k;
	vector<std::tuple<int, int, int>> num;
	int x, y, z;
	vector<int>a(n);
	vector<int>b(n);
	vector<int>c(n);
	int ans = 0;
	for (int i = 0; i < n; ++i) {
		cin >> a[i];
		ans += a[i];
	}
	for (int i = 0; i < n; ++i) {
		cin >> b[i];
	}
	for (int i = 0; i < n; ++i) {
		cin >> c[i];
	}
	for (int i = 0; i < n; ++i) {
		num.push_back({ a[i],b[i]-a[i],c[i] });
	}
	sort(num.begin(), num.end(), [&](tuple<int,int,int>& a, tuple<int,int,int>& b)
		{
			return get<1>(a) > get<1>(b);
		}
	);
	a.clear();
	a.resize(k+1,0);
	for (int i = 0; i < n; ++i) {
		for (int j = k; j >= get<2>(num[i]); --j) {
			/*问题转化为背包问题,即求(作弊-不作弊)的最大值,weight即为c[i],价值为b[i]-a[i]*/
			a[j] = max(a[j], a[j - get<2>(num[i])]+get<1>(num[i]));
		}
	}
	int res = a[k] +1500+ans;/*最后直接加上不作弊的积分总和即可*/
	cout << res;
	return 0;
}/*
 5  3 
 1  2   5 10  7
 20 10 20 11 -4
 3  1  1  1   2
 */




第三题:leetcode629变种题,区别是最后求解时,累加1~k的数组和
#蔚来笔试##蔚来提前批笔试#
全部评论
这两个都AC了嘛
点赞 回复 分享
发布于 2022-07-31 17:40
你好,请问一下为什么要对nums排序呢?排完序不是和原来的数字对不上了吗?
点赞 回复 分享
发布于 2022-07-24 14:32
第二题背包 怎么保证所有物品都选了呢?
点赞 回复 分享
发布于 2022-07-22 08:32

相关推荐

能干的三文鱼刷了100道题:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
05-23 19:02
吉林大学 Java
点赞 评论 收藏
分享
评论
2
22
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务