2021.12.27练习与总结

1.寻找100~200之间的素数

        素数是只能1与本身相乘得到的数,用算法实现的话第一种方法是遍历,用这个数模上2~这个数-1,如果模的结果存在0,就说明这个数不是素数。因此我们使用两层for循环,第一层列出所有的需要测的数,内部的第二层for循环用要测的每一个数模2到这个数本身减1之间的所有数,如果为0则break,测下一个数,如果不为0,说明找到一个素数,进行打印。

        这个算法进行遍历,效率较低,可以进行优化,i=a*b,a或b中至少有一个小于等于i开平方,则第二层for中条件可以改为p<=sqrt(i),减少程序执行次数和时间,还可以进一步优化,偶数绝对不是素数,所以第一层for循环中的i++可以优化为i+=2,再减少一半执行次数。sqrt是数学库函数,需要引头文件math.h。

 

2.寻找1000~2000之间的闰年

        闰年有两个条件,1.能被4整除且不能被100整除       2.能被400整除

        用到并&&和或||。

 

3.求数组内的最大值

        使用for循环,从第一个开始寻找,将max初始化为第一个元素,如果后一个大于前一个,则将max重新赋值,最后打印最大值与元素下标,这里需要注意,如果只打印最大值不会出错,打印下标的话需要在循环最后一次时测试一下是否比较到最后一个元素,是的话就break,不然i会再++一次,造成越界访问。

        错误:基于习惯一开始将max初始化为0,但如果数组内容小于0就会出错,因此将max初始化为数组内的元素。

 4.求最大公约数

        这个有一点难理解,算法是用n除以(m除n的余数),能整除这个余数就是m和n的最大公约数,如果不能整除就再次取余,直到能整除,返回最后取到的余数。

        举个例子,假设m=24,n=18,m%n=6,n/6=3,能整除,则返回最后取到的余数6;假设m=24,n=7,m%n=3,7%3=1,3能整除1,返回最后取到的余数1,1是24和7的最大公约数。

 5.求1/1-1/2+1/3-1/4+...+1/99-1/100,打印结果

        观察发现每一项会变号,每一项分子为1,分母++,一开始发现分母为奇时为正项,用pow函数来实现变号,即(-1)^(i+1),i从1开始则第一项为正,但是这种方法效率应该是比较低的,使用flag在for内部自己变号会提高效率。

        失误:sum定义成int类型,这个表达式是分数,不能使用整型,而应使用浮点型,这里定义为double类型,浮点型字符打印符为%lf。

 6.打印乘法口诀表

        首先要知道乘法口诀表长什么样,第一个数是行,第二个数是列,有几行即有几列,因此列应该小于等于行,使用两个for循环以得到一张表,这里要了解打印时用到的对齐,%d默认左对齐,%-d也是左对齐,中间可添加数字宽度,右对齐直接加数字。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值