开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第N天,点击查看活动详情 案是 11 ,选A
💦第八题 int fun(int a){ a^=(1<<5)-1; return a; } 1 2 3 4 fun(21)运行结果是()
A 10 B 5 C 3 D 8
这里看fun函数里面的表达式,我们来分步进行分析
^= : a ^= b ; -> a = a ^ b
1 << 5 : 表示将1左移5位
0000 0001 -> 0010 0000 -> 32
所以 a ^ = (1<<5)-1 -> a ^ = 31;
所以 a = 21 ^ 31
21 : 0001 0101 31 : 0001 1111
异或的计算方式是 不同为1,相同为0
所以21 ^ 31 :0000 1010 -> 10
所以这道题的答案是10, 选A
💦第九题 若有定义语句:int year=1009,*p=&year;以下不能使变量 year 中的值增至 1010 的语句是()
A *p+=1; B (*p)++; C ++(*p) D *p++
A选项的*优先级最高,所以是先对p解引用得到year的地址,然后+1,所以正确
B和C选项的区别是前置++和后置++的区别,但是他们都带了括号,所以也是先对p解引用,所以也能是year变为1010
D选项是因为后置++的优先级高于*p,但因为是后置++,所以会先对p解引用,再对p进行++,所以对year的值没有改变
所以这道题选 D
💦第十题 下面关于"指针"的描述不正确的是()
A 当使用free释放掉一个指针内容后,指针变量的值被置为NULL B 32位系统下任何类型指针的长度都是4个字节 C 指针的数据类型声明的是指针实际指向内容的数据类型 D 野指针是指向未分配或者已经释放的内存地址
A选项 free释放掉一个指针内容的时候只是把指针指向的空间销毁,并没有把指针置空
B选项 32都是4字节,64为8字节
C选项 例如int指针指向的内容肯定是int类型的
D选项 野指针是指向未分配或者已经释放的内存地址
造成野指针的原因:
在定义指针的时候没有进行初始化 在free掉指针以后没有置空 越界访问,就是超越作用域去访问指针 编程题 🔥组队竞赛 链接:组队竞赛
牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。 例如: 一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3 一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3 一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2 为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。 如样例所示: 如果牛牛把6个队员划分到两个队伍 如果方案为: team1:{1,2,5}, team2:{5,5,8}, 这时候水平值总和为7. 而如果方案为: team1:{2,5,8}, team2:{1,5,5}, 这时候水平值总和为10. 没有比总和为10更大的方案,所以输出10.
解题思路:
举例1: 5 2 8 5 1 5 首先对输入的数组进行排序, 1 2 5 5 5 8 分别取第一个和后两个 1 5 8 然后 2 5 5 为一组 中间值相加为10
举例2:2 5 1 4 3 7 6 9 8 排序 : 1 2 3 4 5 6 7 8 9 分组 1 8 9 2 6 7 3 4 5 中间值相加为 8+6+4=18
推到一个公式:arr.len-2*(i+1)
拿例1来说:arr.len=6 n=2 for(i=0;i<n;i++) i=0,arr.len-2*(i+1) =6-2=4 i=1,arr.len-2*(i+1) =6-4=2
所以第三个数和第五个数相加 即 5+5 = 10
代码如下:
#include #include <alg 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19