一、编程题:
先说编程题,今天编程题的输入条件卡了半天,真尼玛无语了,草蛋浪费了大量时间......
去牛客网看了一下大家反映,各种发帖说今天的笔试很水很简单,我尼玛也是......好吧 我太菜
编程第一题:输入一组数字,找里面的pair对,pair(a,b);a+b = 0即为一对儿。
例如:1, 2 ,3, 4, -1, -2
输出:2 (1-1 = 0 2-2 =0,所以有两对儿)
思路:我将数组里所有负数取反,得正数。然后在遍历数组,找出现2次的,遍历时利用set
代码:
#include<iostream>
#include<vector>
#include<set>
using namespace std;
int GetNum(vector<int>& vec)
{
int dsize = vec.size();
for(int i = 0;i<dsize;i++)
{
if(vec[i] < 0)
{
vec[i] = 0 - vec[i];//abs(vec[i]);
}
}
set<int> save;
set<int>::iterator iter;
int num = 0;
for(int i = 0;i<dsize;i++)
{
if (save.find(vec[i]) == save.end())//vec[i]第一次出现
{
save.insert(vec[i]);
}
else
{
iter = save.find(vec[i]);
save.erase(iter);
num++;
}
}
return num;
}
int main()
{
vector<int> vec;
int num;
while (cin >> num)
{
vec.push_back(num);
if (cin.get() == '\n')
{
break;
}
}
cout<<GetNum(vec)<<endl;
return 0;
}
二、选择题:
1.#pragma pack(4)
//按照4字节对齐的意思。
2.offset:
结构体某个成员相对于结构体首地址的偏移量可以通过宏offsetof()来获得。
今天做了很多结构体、类的sizeof大小的题。
贴一片文章,讲的不错。https://blog.csdn.net/callinglove/article/details/46534883
3.二维数组的题:啊我擦,还是做得时候燃
void fun()
{
int n[][3] = {1,2,3,4,5,6};
int (*p)[3];
p = n;
cout<<"p[0][0] :"<<p[0][0]<<endl;
cout<<"*(p[0])"<<*(p[0])<<endl;
cout<<"*(p[1])"<<*(p[1])<<endl;
cout<<"*(p[2])"<<*(p[2])<<endl;
cout<<"*(p[0]+0)"<<*(p[0]+0) <<endl;
cout<<"*(p[0]+1)"<<*(p[0]+1) <<endl;
cout<<"*(p[0]+2)"<<*(p[0]+2) <<endl;
cout<<"(*p)[0])"<< (*p)[0]<<endl;
cout<<"(*p)[1])"<< (*p)[1]<<endl;
cout<<"(*p)[2])"<< (*p)[2]<<endl;
}
看运行结果吧:
做这个题:1.看的时候根据符号优先级看 2.确定了符号优先级再看数据类型,什么数据类型对应什么加加减减
(贴一片不错的讲解https://blog.csdn.net/qq_33573235/article/details/79530792)
4.结构体的位对齐
//按照4字节对齐方式
struct s1
{
int i:8;
int j:4;
int k:3;
double v;
};
struct s2
{
int i:8;
int j:4;
double v;
int k:3;
};
cout<<sizeof(s1)<<endl;
cout<<sizeof(s2)<<endl;
结果:12 16
老师以前说这种一般不考,当时学的时候就没太在意,还真尼玛考出来了。。。看来真不能放松啊
5.......
还有很多...... 记不完了 写博客太费时间了 有空补充吧 估计没啥空 每天很多题做很多书看 总结多少是多少