巨人网络20201029笔试题记录
1. 进制转换
- 题目描述:10进制数转成2进制数后取反,再10进制输出。
- 分析:这个题目很基础,考察的进制转换很细致。要是平时没注意细节在笔试段时间内很难很快的做出来。10进制转2进制是做除法,2进制转回去是做乘法。基础概念需要去看一下。取反操作就是比如5的二进制是101,取反就是010.转成10进制就是2.最后代码输出2.
代码
#include<iostream> #include<math.h> using namespace std; int main() { int n; cin >> n; int a[100]; int index = 0; int t = n; while (t) { a[index++] = t % 2; // 存储到a中 把2 t /= 2; } int re = 0; for (int i = index - 1; i >= 0; i--) { if (a[i] == 0) //转换后的2进制数要取反 我们不取反 把等于0的位置相乘 也能起到一样的效果 re += pow(2, i); } cout << re << endl; }2. 矩阵旋转顺时针90度
- 题目描述:输入一个N*N矩阵,返回这个矩阵顺时针旋转90度后的矩阵。
vector<vector<int>> rotaMatriox(vector<vector<int>> & matrix){ int n = matrix.size(); vector<vector<int>> result(n,vector<int>(n)); // 定义一个结果矩阵 返回旋转后的矩阵 for(int i =0; i<n;i++) for(int j =0; j<n;j++) result[j][n-i-1] = matrix[i][j]; // 找到旋转后坐标对应关系 return result; }这个题目其实不难,做过类似的。直接原地旋转,还不用开辟新的空间。
