2022-08-26-AMD-亲挂帮踩坑
软件应用岗
1h,前期抄选择题花了太多时间,后面写代码时间紧张而且不好debug
最后发现了错误但没时间改了,其实暴力算就行,因为不卡数据范围
考完后做了两种方法
10 单选 20分
!!!
int a=5; float b; cout<<sizeof(++a+b); cout<<a;
set the LSB to 1 (A?D) 单选
union dt{
struct{
unsigned int b0:1;
unsigned int b1:1;
unsigned int b2:1;
unsigned int b3:1;
}x;
unsigned int v;
};
int main()
{
dt d={};
d.v=0x20230000;
// set the LSB to 1
// d.b0=1; // A. 我这里会报错,要么写 d.x.b0,要么去掉x,可以直接d.b0
// d.v|=0x0000001; // B. 539164673
// d.v^=0x0000001; // C.
d.v&=0x0000001; // D.
cout<<d.v<<"\n";
}- result:
extern int a;
a=2023;
printf("%d",a);- fork后的父进程和子进程会共享什么 (题目记错了?子进程获得父进程的AD?C?)
A. stack
B. process ID
C. shared memory segment
D. heap
五多选 50分。
- C++内存管理,包括哪些区:
stack、heap、text segment、initialized data segment、uninitialized data segment
https://www.geeksforgeeks.org/memory-layout-of-c-program/
外国的面经是这样的。。。十分没了
int a[2]={1,2}; int b[2]={1}; int c[]={1}; int d[]={};哪几个对...
离谱 BC
#include<iostream>
using namespace std;
#pragma pack(1)
class a{
public:
virtual int f()=0;
int f2();
static int f3();
static int m0[4];
private:
int m1;
char m2;
};
class b:public a{
int f(){return 0;}
};
int main()
{
b data[4];
// if data = 0x1000 // data 前面没有&,不是我漏了
// 问:&data+1 = ? // 多选
// A. 0x1018
// B. 0x1024
// C. 0x1034
// D. 0x1054
cout<<data<<"\n";
cout<<&data<<"\n";
cout<<&data+1<<"\n";
// cout<<&(data+1)<<"\n"; // error, data+1 是右值
cout<< &data[1]<<"\n";
return 0;
}输出:
0x16fc5f444 0x16fc5f444 0x16fc5f478 // 多了34,64位系统 0x16b3df451 // 多了13,说明每个b占13个字节
静态函数、非虚函数不算大小,只有一个虚函数指针4或者8,外加一个int一个char一共5,b的大小是9或13,4个元素的数组大小是36或52,十六进制是24、34,&data取了地址,指向长度为4个元素的数组类型
两个编程 15*2
// 反转32位2进制的数
// #include <iostream>
// #include <string>
// using namespace std;
// // 请按你的实际需求修改参数和返回值类型
// unsigned int BitInvert(unsigned int src) {
// // 在这⾥写代码
// unsigned long dst = 0;
// for(int i=0;i<32;i++){
// dst=dst|(src&1);
// src=src>>1;
// dst=dst<<1;
// }
// return (unsigned int)(dst>>1);
// }
// 返回所有非递减的长度大于等于2的可以不连续的无重复的子数组 0‘
// 前期做完通不过,测试不会输出打印的字符串!导致难以发现错误
// 只能在网页写代码,不能跳出来
// 测试时有很多干扰代码(两个测试文件加自己写的代码文件)
// 最后几分钟发现了错误,但没空改了
#include <iostream>
#include <string>
#include <vector>
#include <climits>
#include <set>
using namespace std;
// vector<vector<int>> g(vector<int>& a, int i,int last){
// if(i==a.size())return {};
// vector<vector<int>> res,tmp;
// tmp = g(a,i+1);
// for(auto q:t){
// if(q.size()>=2)
// res.push_back(q);
// }
// vector<int> t;
// t.push_back(a[i]);
// for(int q=i+1;q<a.size();q++){
// if(t.back()<)
// }
// return res;
// }
// void g(const vector<int>&a, int i, vector<int>& t,vector<vector<int>>& res, bool add){
// if(i==a.size())return;
// g(a,i+1,t,res,1);
// if(t.size()>=2&&add==0){
// res.push_back(t);
// }
// if(t.empty()||a[i]>=t.back()){
// t.push_back(a[i]);
// g(a,i+1,t,res,0);
// t.pop_back();
// }
// }
// // 请按你的实际需求修改参数和返回值类型
// vector<vector<int>> findSubsequences(vector<int>& nums)
// {
// vector<vector<int>> res(0);
// vector<int> t(0);
// g(nums,0,t,res,0);
// return res;
// }
// 考完后再做出来的:
void g(const vector<int>&a, int i, vector<int>& t,set<vector<int>>& res){
if(i==a.size()){
if(t.size()>=2){
res.insert(t);
}
return;
}
g(a,i+1,t,res);
if(t.empty()||a[i]>=t.back()){
t.push_back(a[i]);
g(a,i+1,t,res);
t.pop_back();
}
}
// 请按你的实际需求修改参数和返回值类型
vector<vector<int>> findSubsequences_1(vector<int>& nums)
{
set<vector<int>> res;
vector<int> t(0);
g(nums,0,t,res);
vector<vector<int> > ans;
for(auto i:res)
ans.push_back(i);
return ans;
}
// 请按你的实际需求修改参数和返回值类型
vector<vector<int> > findSubsequences_2(vector<int>& nums)
{
int n=nums.size();
set<vector<int> > s;
for(int i=1;i<(1<<n);i++){
int c1=__builtin_popcount(i);
if(c1<2)continue;
vector<int> v;
int ii=i;
while(ii){
int idex = __builtin_ctz(ii);
if(v.size()==0||v.back()<=nums[idex]){
v.push_back(nums[idex]);
ii=ii&(ii-1);
}else break;
}
if(v.size()==c1)
s.insert(v);
}
vector<vector<int> > ans;
for(auto i:s)
ans.push_back(i);
return ans;
}
int main(){
vector<int> a(4);
a[0]=4;a[1]=6;a[2]=7;a[3]=7;
//4, 6,
// 4, 6, 7,
// 4, 6, 7, 7,
// 4, 7,
// 4, 7, 7,
// 6, 7,
// 6, 7, 7,
// 7, 7,
auto v = findSubsequences_1(a);
cout<<"case1:\n";
for(auto i:v){
for(auto j:i)
cout<<j<<", ";
cout<<"\n";
}
cout<<"\n\ncase2:\n";
a.resize(5,4);
a[1]=4,a[2]=3,a[3]=2,a[4]=1;
// [[4,4]]
v = findSubsequences_1(a);
for(auto i:v){
for(auto j:i)
cout<<j<<", ";
cout<<"\n";
}
return 0;
}
#23秋招##AMD##笔试##2023校招#
查看5道真题和解析