《C语言假期作业学习笔记》—Day10

《C语言假期作业学习笔记》—Day10,第1张

《C语言假期作业学习笔记》—Day10

请乘理想之马 挥鞭从此起程 路上春色正好 天上太阳正晴 

                                                                       ——希望疫情早日结束,所有美好如约而至!

Day10  一、选择题

1、求函数返回值,传入 -1 ,则在64位机器上函数返回( )

A: 死循环 B: 64 C: 32 D: 16 2、读代码选结果( )

 

A: 1 B: 2 C: 32 D: 死循环,没结果 3、下述赋值语句错误的是( ) A: a = (b = (c = 2 , d = 3)) B: i++ C: a/b = 2 D: a = a < a + 1 4、若有 int w=1, x=2, y=3, z=4; 则条件表达 w < x ? w : y < z ? y : z 的值是( ) A: 1 B: 2 C: 3 D: 4 5、以下程序运行后的输出结果是( )

A: 0,0

B: 0,1

C: 1,0

D: 1,1 

 二、编程题 T1:不用加减乘除做加法_牛客题霸_牛客网 描述

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

数据范围:两个数都满足 0 le n le 10000≤n≤1000
进阶:空间复杂度 O(1)O(1),时间复杂度 O(1)O(1)

示例1

输入:1,2

返回值:3

示例2

输入:0,0

返回值:0

T2:LeetCode448. 找到所有数组中消失的数字

给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。

示例 1:

输入:nums = [4,3,2,7,8,2,3,1]
输出:[5,6]


示例 2:

输入:nums = [1,1]
输出:[2]
 

提示:

n == nums.length
1 <= n <= 105
1 <= nums[i] <= n
进阶:你能在不使用额外空间且时间复杂度为 O(n) 的情况下解决这个问题吗? 你可以假定返回的数组不算在额外空间内。

题解: 一、选择题 1 、 答案解析: 正确答案: C x=x&(x-1) 这个表达式执行一次就会将 x 的 2 进制中最右边的 1 去掉,在 x 变成 0 之前,表达式能执行几次,就去掉几个 1 ,所以 这个代码实现了求一个有符号整数二进制补码中1 的个数的功能,我们知道 -1 的补码是全 1 ,而 int 类型 4 个字节 32 位,选 C   2 、 答案解析: 正确答案: D 此题一个关键,有符号数右移运算高位是补符号位的,负数的符号位是 1 ,所以 x 永远不会变为 0 ,是个死循环 3 、 答案解析: 正确答案: C C 选项中 a/b 是表达式,表达式计算的结果是一个值不能做左值 4 、 答案解析: 正确答案: A wint Add(int num1, int num2) { while (num2 != 0) { //进位不为0则持续与相加结果进行相加 int tmp = num1 ^ num2; //得到每位相加不考虑进位的数据 num2 = (num1 & num2) << 1; //同1的位相加则会进位 num1 = tmp; } return num1; } 2 、【答案解析】: numsSize 大小的数组,其中每个元素的数据在 [1, numsSize] 区间之内,解法其实并不复杂,以数组元素的绝对值作为下标,将对应位置的数据置为负数,比如 0 号位置是 3 ,则把 3 号位置的数据重置为负值,等到数组遍历重置完毕,只有缺失的这个数字对应的位置保留正数,其他出现过的数字位置都会是负数, 要注意不要重复设置负数,因为负负得正。 示例:
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize) 
{
	for (int i = 0; i < numsSize; i++)
	{ 
		if (nums[abs(nums[i]) - 1] > 0) nums[abs(nums[i]) - 1] = -(nums[abs(nums[i]) - 1]);
	}
	int* ret = (int*)malloc(sizeof(int) * (numsSize)); 
	*returnSize = 0; 
	for (int i = 0; i < numsSize; i++)
	{
		if (nums[i] > 0) 
		{ 
			ret[*returnSize] = i + 1;
			*returnSize += 1; 
		}
	}
	return ret;
}
后记:
●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

                                                                ——By 作者:新晓·故知 《C语言假期作业学习笔记》之内容采用动态管理即若学习到多解、优解等将会进行更新,敬请读者斧正!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5713452.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存