简单c语言练习题(第六期)

分享一些练习题和大致解题思路(C语言)

分享的题基本都是各大网站,或者丛书中出的比较优秀的题,或者是博主看到的写过的一些题,由于博主也是一位刚入门的萌新,水平有限,现在可能不会出什么非常难的题,但是对于初入c语言的学员应该会有些帮助,好的现在开始(答案会放在另一个分组中,答案会是博主自己手打的,可能会有错误或者更优解也非常欢迎探讨交流一番)


题目

  1. 求一个有序数组中的两个元素值相加为k的数字,返回这两个元素的下标,要求时间复杂度是O(n),空间复杂度是O(1)

  2. 如何判断一个数n是否是2的k次方?注意:不用求k是多少,只需要判断,请编写函数实现

  3. 字符串压缩,输入字符串只包含a-z字母以及结束标志,请编写函数实现对连续出现的相同字符进行压缩,例如:"xxxyyyyz"压缩后字符串为"3x4yz""yyyyyyy"压缩后为"7y"

  4. 编写代码实现如下功能:删除字符串收尾的空格,中间的连续空格只留一个,原来字符串的顺序不变,如"*****as ***** adadq *****"(*是空格)变成"as*aadadq"


解题思路

今天的题目还是有点挑战性的,大家加油啊

  1. 这是一个有序的字符串,定义两个指针,一个从头走,一个从尾走,两个指针指向的数相加,打了后面的指针向前走,小了前面的指针向后走,知道找到为止

  2. 前几期求过一个二进制数中出现过多少的1,这个和那个很像,什么是二的次数

    0000 0001 //1
    0000 0010 //2
    0000 0100 //4
    所以判断二的次数就是二进制数中只出现1次1的数
    可以使用">>"该符号来算出出现1的次数,然后看出现1的次数是几来判断是不是2的次数
    还有一种方法,直接用 x&x(x-1) 是否等于0 来判断
    本来这个式子是执行几次之后等于0,就可以知道有几个1,那执行一次式子等于0就代表只有一个1

  3. 不需要想的太复杂,数每个字母出现的个数打印出来就行,不需要对字符串进行修改
    printf("%d%c\n") %d是出现次数%c是哪个字母

  4. 本题比较难,看图
    在这里插入图片描述


分享一下
如果对题目感兴趣可以看看前几期的题
第五期链接https://blog.csdn.net/Heart_of_collaps/article/details/100531850
第四期链接https://blog.csdn.net/Heart_of_collaps/article/details/100523563
每一期都会在其他分组中放上答案,如果写不出来,可以参考答案对照着来写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值