【持续更新】C语言 经典问题 思路梳理(变态无聊题,但面试、知识理解检测及行走江湖必备)

 

​​目录

1、经典数学问题

(1)斐波那契数列

1)数学特点

2)代表问题:兔子生崽

(2)最大公约数和最小公倍数

1)最小公倍数

2)求最大公约数:辗转相除法(欧几里德算法)

1--证明

2--思路

2、经典“底层”问题

(1)大端与小端

参考


 

1、经典数学问题

(1)斐波那契数列

1)数学特点

数列中的两项之和等于后一项

数学函数定义:

 

2)代表问题:兔子生崽

第一个月兔子没有繁殖能力,所以还是一对;两个月后生下一对兔子,共有两对;三个月后,老兔子生下一对,小兔子还没有繁殖能力,所以一共是三对,以此类推,可以列出下表:

 

 

(2)最大公约数和最小公倍数

1)最小公倍数

最小公倍数 = 输入的两个数之积除以它们的最大公约数

2)求最大公约数:辗转相除法(欧几里德算法)

1--证明

设c是a和b的最大公约数,记为c=gcd(a,b),a>=b,

令r=a mod b

设a=kc,b=jc,则k,j互素,否则c不是最大公约数

据上,r=a-mb=kc-mjc=(k-mj)c

可知r也是c的倍数,且k-mj与j互素,否则与前述k,j互素矛盾,

由此可知,b与r的最大公约数也是c,即gcd(a,b)=gcd(b,a mod b),得证。

2--思路

第1步:a ÷ b,令r为所得余数(r≥0)

第2步:

互换:置 a←b,b←r,并返回第一步。

(3)质数(素数)

1)定义

只有两个正因数(1和自己)的自然数,

2)判断方法

用一个数分别去除2到这个数的平方根,如果能被整除, 则表明此数不是素数,反之是素数。

1--按照质数的定义,应该分别用2到自己减一的这些值去进行运算,但是为了提高运算效率,只需要到平方根即可。

2--如果数c不是素数,则还有其他因子,其中的因子,假如为a,b,其中必有一个大于sqrt(c) ,一个小于sqrt(c) 。

2、经典“底层”问题

(1)大端与小端

解析:

1)联合体(共用体union)特点:结构中的成员共享内存空间
2)大端、小端

1--本质

数据存储方向,包括在socket网络通信中涉及到的字节序问题

2--数据存储方向

大端:数据低位存在地址高位

小端:数据低位存在地址低位

3-由主控架构设计者决定

PC(X86-英特尔):小端

嵌入式设备(ARM):可通过修改底层寄存器的值设定大小端,默认小端
3)解题
联合体成员x[0] = 10,x[1] = 2,在X86_64中式按照小端存储的,

数据实际存储就是:
00000000 00000000 00000010 00001010,即522

参考

兔子问题(斐波那契数列)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值