持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第N天,点击查看活动详情 这道题的答案是B
💦第十题 下列的模板声明中,其中几个是正确的()
1)template 2)template<T1,T2> 3)template<class T1,T2> 4)template<class T1,class T2> 5)template<typename T1,T2> 6)template<typename T1,typename T2> 7)template<class T1,typename T2> 8)<typename T1,class T2> 1 2 3 4 5 6 7 8 A 2 B 3 C 4 D 5
这道题是对模版进行考察的
从图可以得知 1,2,3,5,8是错误的
4,6,7是正确的
这道题的答案是B
编程题 🔥第一题 链接:另类加法
题目解析 本题的意思是自己实现加法,不适用现成的运算符,考察大家对于运算符的灵活运用
解题思路: 本题可以通过位运算实现,具体实现如下: 两个数求和,其实就是 求和后当前位的数据+两个数求和的进位
例如: 1 + 2; 00000001 + 00000010 求和后当前位的数据: 00000011 ; 求和后的进位数据: 没有进位,则 00000000 两者相加,则得到: 00000011 就是3 2 + 2; 00000010 + 00000010 求和后当前位的数据: 00000000, 1和1进位后当前为变成0了 求和后进位的数据: 00000100, 两个1求和后进位了 相加后得到: 00000100 就是4
求和后当前位的数据:简便的计算方法就是两个数进行异或 00000001 ^ 00000010 -> 00000011 求和后进位的数据:简便的计算方法就是两个数相与后左移一位 (00000010 & 00000010) << 1 所以这道题使用递归更加容易理解
代码演示 class UnusualAdd { public: int addAB(int A, int B) { // write code here if(A == 0) return B; if(B == 0) return A; int sum = A ^ B;//不考虑进位时候相加的结构 int ret = (A&B) << 1;//计算进位的数据 return addAB(sum, ret); } }; 1 2 3 4 5 6 7 8 9 10 11 12 13 🔥第二题 链接:走方格的方案数
单,可以通过递归解答。
解题思路 | 1 | 2 | 3 | | 4 | 5 | 6 | | 7 | 8 | 9 | 对于上面的nm(33)的格子,有两种情况 a. 如果n或者m为1,则只有一行或者一列,从左上角走到右下角的路径数为n + m 比如: 1 * 1格子,可以先向下走,再向右走,到达右下角;或者先向右走, 再向下走,到达右下角,共两条,即 1 + 1 = 2,对于1 * m和 n * m的 情况同学们自己画一下 b. 如果n,m都大于1,那么走到[n][m]格子的右下角只有两条路径, <1>: 从[n - 1][m]格子的右下角向下走,到达 <2>: 从[n][m - 1]格子的右下角向右走,到达 所以走到[n][m]格子的右下角的数量为[n-1][m] + [n][m - 1],可以通过递归实现,情况a为递归的终止条件。 代码演示: #include using namespace std;
int pathnum(int n,int m) { if(n == 0 || m == 0) return 1; return pathnum(n-1,m) + pathnum(n, m-1); 题目解析 本题为求取路径总数的题目,一般可以通过递归求解,对于复杂的问题,可以通过动态规划求解。此题比较简单,可以通过递归解答。
解题思路 | 1 | 2 | 3 | | 4 | 5 | 6 | | 7 | 8 | 9 | 对于上面的nm(33)的格子,有两种情况 a. 如果n或者m为1,则只有一行或者一列,从左上角走到右下角的路径数为n + m 比如: 1 * 1格子,可以先向下走,再向右走,到达右下角;或者先向右走, 再向下走,到达右下角,共两条,即 1 + 1 = 2,对于1 * m和 n * m的 情况同学们自己画一下 b. 如果n,m都大于1,那么走到[n][m]格子的右下角只有两条路径, <1>: 从[n - 1][m]格子的右下角向下走,到达 <2>: 从[n][m - 1]格子的右下角向右走,到达 所以走到[n][m]格子的右下角的数量为[n-1][m] + [n][m - 1],可以通过递归实现,情况a为递归的终止条件。 代码演示: #include using namespace std;
int pathnum(int n,int m) { if(n == 0 || m == 0) return 1; return pathnum(n-1,m) + pathnum(n, m-1); }
int main() { int n,m; while(cin >> n >> m) cout << pathnum(n, m) << endl; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
一起去看日落吗 已关注
30
18
0