C语言综合练习3

BC115-小乐乐与欧几里得(最大公约数)

描述
小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数,但是他竟然不会求两个正整数的最大公约数与最小公倍数之和,请你帮助他解决这个问题。
输入描述:
每组输入包含两个正整数n和m。(1 ≤ n ≤ 109,1 ≤ m ≤ 109)
输出描述:
对于每组输入,输出一个正整数,为n和m的最大公约数与最小公倍数之和。

核心思想:分别取n和m的较大值和较小值,较大值向上递增找最小公倍数,较小值向下找最大公约数

效率过低——改进算法

优化:最大公约数用辗转相除法,最小公倍数用两个数乘积除以最大公约数

坑点:题目中给出的n和m的取值范围暗示必须至少是长整型才能完成任务

BC69-空心正方形图案

描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的“空心”正方形图案。
输入描述:
多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“*”的数量。
输出描述:
针对每行输入,输出用“*”组成的“空心”正方形,每个“*”后面有一个空格。

offsetof 宏的模拟实现

写一个宏,计算结构体中某变量相对于首地址的偏移

函数使用示例

偏移量的计算实质上是地址(指针)作差

模拟实现

BC65-箭形图案

描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的箭形图案。
输入描述:
本题多组输入,每行一个整数(2~20)。
输出描述:
针对每行输入,输出用“*”组成的箭形。

分两部分打印,上面的n行和下面的n+1行

BC76-公务员面试

描述
公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分制),去掉一个最高分和一个最低分,输出每组的平均成绩。
(注:本题有多组输入)
输入描述:
每一行,输入7个整数(0~100),代表7个成绩,用空格分隔。
输出描述:
每一行,输出去掉最高分和最低分的平均成绩,小数点后保留2位,每行输出后换行。

依次输入,满七个成绩进行处理

找单身狗

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
编写一个函数找出这两个只出现一次的数字。

分成两组:每个组中只有一个单身狗;然后每组各自异或全部元素,所得到的就是两个单身狗

分组依据:将全部数字异或在一起(得到的是两个单身狗异或的结果),取其中一个不为0的位,将该位不同的元素分组

模拟实现atoi

示例

注意事项

  • 专门用来将字符串转化为整数的函数

  • 负数也可以转换

  • 过大的数字可能无法转换

  • 遇到非数字字符就停止转换

  • 可以过滤多余的空格字符

模拟实现

  1. 空指针:进行断言报错

  1. 空字符串:状态值判断字符串是否非法——全局变量

  1. 空格(空白字符):直接跳过

  1. 正负号:用标志位记录正负

  1. 非数字字符:判断是否是数字字符,不是就返回

  1. 越界:每次计算新的和的时候都判断是否越界(同时为了防止被截断无法判断越界,创建ret变量为更长的整型)

交换奇偶位

写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。

交换奇偶位,相当于拿出所有偶数位和奇数位分别左移和右移一位

取出奇偶位的方式是要取出的位&1,不要的位&0


链接: https://www.nowcoder.com/questionTerminal/18ecd0ecf5ef4fe9ba3f17f8d00d2d66

Fibonacci数列是这样定义的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, ...,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。

先找到改数字最近的两个斐波那契数,然后分别相减取差值绝对值较小者

https://www.nowcoder.com/questionTerminal/4060ac7e3e404ad1a894ef3e17650423

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

预先统计空格个数,计算出需要增加的字符串长度,从后向前挪动字符串,每遇到一个空格替换成%20

具体实现:两个指针,一个指向源字符串末尾,一个指向新字符串末尾

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ta亻也

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值