华为OJ之初级篇Ⅱ

11.奖金提成
简要描述:企业发放的奖金根据利润提成。

利润低于或等于100000元的,奖金可提10%;

利润高于100000元,低于200000元(100000≤200000)时;

低于100000元的部分按10%提成;

高于100000元的部分,可提成7.5%;

200000≤400000时,低于200000元部分仍按上述办法提成,(下同);

高于200000元的部分按5%提成;

400000≤600000元时,高于400000元的部分按3%提成;

600000≤1000000时,高于600000元的部分按1.5%提成;

I>1000000时,超过1000000元的部分按1%提成。

从键盘输入当月利润I,求应发奖金总数。





输入:一个整数,当月利润。

输出:一个整数,奖金。

例如:输入900

输出90

备注:奖金向下取整,不作四舍五入处理。
12.判断任意两台计算机的IP地址是否属于同一子网络
简要描述:子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。

最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯。就这么简单。

请看以下示例:

运算演示之一:

IP地址:192.168.0.1

子网掩码:255.255.255.0

AND运算

转化为二进制进行运算:

IP地址:11010000.10101000.00000000.00000001 
子网掩码:11111111.11111111.11111111.00000000 
AND运算:11010000.10101000.00000000.00000000 
转化为十进制后为: 192.168.0.0



运算演示之二:
IP地址:192.168.0.254 
子网掩码:255.255.255.0 
AND运算

转化为二进制进行运算:
IP地址:11010000.10101000.00000000.11111110 
子网掩码:11111111.11111111.11111111.00000000 
AND运算:11010000.10101000.00000000.00000000 
转化为十进制后为:192.168.0.0



通过以上对两台计算机IP地址与子网掩码的AND运算后,我们可以看到它运算结果是一样的。均为192.168.0.0,所以这二台计算机可视为是同一子网络。

接口说明

原型:

int IsSameSubNetwork(char * pcIp1, char * pcIp2, char * pcSubNetworkMask);

输入参数:

char * pcIP1: 计算机1的IP地址,格式:“192.168.0.254”

char * pcIP2: 计算机2的IP地址,格式:“192.168.0.1”

char * pcSubNetworkMask: 子网掩码,格式:“255.255.255.0”



返回值:

0:IP1与IP2不属于同一子网络。

1:IP1与IP2属于同一子网络。

13.求M的N次方的最后三位
简要描述:正整数M 的N次方有可能是一个非常大的数字,我们只求该数字的最后三位

例1:

比如输入5和3 ,5的3次方为125,则输出为125 

例2:

比如输入2和10 2的10次方为1024 ,则输出结果为24

例3:

比如输入111和5 111的5次方为116850581551,则输出结果为551

14.求车速
简要描述:一辆以固定速度行驶的汽车,司机在上午10点看到里程表(里程表有6位)上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的,例如95859公里)。两小时后里程表上出现了一个新的对称数。问该车的速度(公里/小时)是多少?



接口说明

原型:

int CalcSpeedOfCar(int iCurrentMileage, int * piCarSpeed);

输入参数:

int pcCurrentMileage:当前里程数(为对称数) (pcCurrentMileage ≤ 999999)



输出参数:

int * piCarSpeed:汽车速度



返回值:

0:汽车速度计算成功

1:汽车速度计算失败,在里程表的范围内找不到下一个对称数

15.求某二进制数中1的个数
简要描述:

求某二进制数中1的个数。

给定一个unsigned int型的正整数,求其二进制表示中“1”的个数,要求算法的执行效率尽可能地高。

详细描述:

接口说明

原型:

int GetCount(unsigned int num)

输入参数:

num 给定的正整数

输出参数(指针指向的内存区域保证有效):



返回值:

返回1的个数

举例:

输入13,则对应的二进制是1101,那么1的个数为3个。

则:返回3。

16.求圆的面积
简要描述:计算半径为1到10的圆的面积,若面积在40到90之间请输出

接口

int OutPutRotundityArea(float* pResultArray,int &ArrayCount)

float* pResultArray :float型数组

Int ArrayCount:数组长度

规格

要求时间复杂度为O(n)

π = 3.14 

17.求子数组的最大和
简要描述:输入一个整形数组。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。

接口

Int GetSubArraySum(Int* pIntArray,Int nCount);

规格

要求时间复杂度为O(n)

举例

例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,
因此输出为该子数组的和18

18.取给定正整数的指定bit位开始的指定长度的数据
简要描述:接口说明

原型:

unsigned int GetBitsValue(unsigned int input, unsigned int startbit, unsigned int bitlen)

输入参数:

input 输入的整数

startbit 需要获取的开始bit

bitlen 需要获取的bit长度

输出参数(指针指向的内存区域保证有效):



返回值:

对应的bit取值

举例:

输入:4, 2, 2

返回:2

4对应的二进制为100(bit0和bit1为0,bit2为1),那么从bit2开始的2位为10,那么对应的十进制为2。

19.上楼梯问题
简要描述:爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问这条阶梯共有多少阶?

20.数列求和
简要描述:编写程序,输入一个正整数n,求下列算式的值。要求定义和调用函数fact(k)计算k的阶乘。

1+1/2!+ .... +1/n!

计算结果保存在double类型变量中。

接口说明

原型:

void GetResult(int InputNum, double *NumResult);

输入参数:

Int InputNum:输入一个正整数,进行表达式计算

char *NumResult:输出表达式的值

返回值:

void

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值