自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 关于判断一个n是否是一个数的幂

当然我写的原代码必定比这个丑陋,但无所谓我会借鉴答案进行改善,这个方法叫试除法,但其实对于2这个特殊的数,因为计算机是二进制,所以我们知道2的幂在二进制中表示形式就是只有一个1,然后又发现n-1除了原来那一位变为0,后面都变成1,这个时候我们只要让n和n-1按位与,如果他是二的幂,那么结果就是零,所以我们得到更加巧妙的解法,然后我带着这个方法踌躇满志地去做3的幂,然后发现不得行,才发现试除法才是这种问题的一般解法,毕竟不是所有数都和2一样特殊。首先是求2的幂,我的思路就是一直除,除到为1为止。

2023-10-08 20:27:34 67 1

原创 运用递归的方式打印一个整数的各个数位上的数字

运用递归后这个代码长短变化不大但是却可以使输出的整数按照数位从大到小的顺序打印出来,同时这个递归设置了一定的限制条件,并且每次递归都使得结果朝限制条件不断靠近,所以这个递归的使用是比较恰当的。而且这种打印方式,比如打印12345,他的输出结果会是 5 4 3 2 1。会倒过来,不太符合我们的习惯,所以求助AI我得到以下运用递归的版本。这个任务其实要完成不是很难,下面是我写的代码。但这不符合题意,因为没有用递归。

2023-10-02 12:54:18 90 1

原创 猜数字游戏

干票大的(对于我来说),做个猜数字游戏,系统给出一个随机数,你输入一个数,如果大了系统提示你数太大,太小提示你太小,直到你猜到这个数为止。printf("请输入你的猜测(1到100之间的整数):");我们需要一个游戏菜单,从中选择我们是进入游戏(1)还是退出游戏(0),然后就是游戏的主体函数。printf("-------- 猜数字游戏 --------\n");printf("输入无效,请重新输入\n");printf("输入无效,请重新输入\n");printf("退出游戏\n");

2023-10-01 18:53:12 52

原创 求1-1/2+1/3-1/4+1/5……

其实这个符号的问题很好解决,只需定义一个数值为1的整型变量,在每次循环结尾改变它的值即课达到想要的效果。这个题目关键在于两个点,一是对于结果的存储要注意肯定不是一个整型,其次就是对于符号的变换。解决这两个问题这个题目只能说洒洒水。

2023-10-01 18:28:58 247

原创 求1到100中出现了几个数字9

属于是我能做出来的类型,但这种算法很低级,而且只牵扯到两位或三位数所以显得简洁,但如果我要求几百位的数字,那么代码的行数也会变得很长,AI提供了一种高效而试用范围更广的解法。没必要运用两个条件语句,用一个while就解决了问题,并且没有范围限制,让人感慨AI的强大,对于低级一点的代码,AI已经可以做到十分高效且完美,如果不好好努力,饭碗是要没了。printf("数字9在1到100的整数中出现了 %d 次\n", count);先解释一下这个题目,比如9,这是出现一次,再比如99,这就是出现两次。

2023-10-01 18:25:32 30

原创 打印100-200之间的素数

这个代码将问题解决了,于是我有点膨胀了,觉得自己又行了,然后才发现这个算法只能算是业余算法,因为对于一个数量级较大的数,这个算法无疑是计算量很大的,仔细想想发现,假设你这个素数是一个平方数,那么自然不用说你的平方根就是你的因数,但如果你不是平方数,那么如果你是合数,一定可以写成两个整数的乘积,而这两个数一定有一个大于你的平方根,有一个小于你的平方根,至于证明,可以用基本不等式,取等得最大,所以我们这里根本不用算所有的数,就算到平方根就可以了,优化代码如下。for (i = 2;

2023-10-01 18:15:04 26

原创 用辗转相除法求两个数的最大公因数

其方法是将要求的两个数中的较大数作为被除数,较小数作为除数,然后相除,如果余数不为零,则把除数作为新的被除数,余数作为新的除数,知道余数为零,此时的除数就是我们要求的最大公因数。这是老师写的,while循环的运用确实巧妙,在精简程度方面优于第一种写法。辗转相除法又称欧几里得算法被用来求两个数的最大公因数。printf("请输入两个数:>");这是我写的,好像一般。

2023-10-01 18:03:09 95

原创 用二分查找在数组中查找特定元素

而其实找这个特殊元素的过程可以理解为找函数零点的过程,而找函数零点高中学习过的一种经典方法就是二分法加零点存在定理,所以这里运用这种思想。printf("找到了,下标是:%d\n", mid);printf("找到了,下标是:%d\n",i);printf("找不到\n");printf("找不到");在一定程度上简化了代码,减小了计算量。老规矩先展示一般解法。

2023-10-01 17:55:37 74

原创 用函数递归求斐波那契数列

这里我省略了主函数,这个方法用到了递归,而且只要在主函数中输入一个有限的n值,就可以限制递归次数,使递归结果无限靠近这个限制条件,不会担心栈溢出,但是,这个代码当算到第四十个斐波那契数时你会发现计算的速度开始变慢,其原因是你每递归一次,都会额外计算两个斐波那契数,位置越靠前被计算的次数越多,如果你要算第五十个斐波那契数,那么第三个斐波那契数可能要被算上几万次,这无疑在浪费算力,所以我们希望把算出来的斐波那契数存起来,从而避免不必要的计算。int c = 1;// 错误输入,返回-1或其他合适的错误码。

2023-10-01 17:41:26 531

原创 打印二进制位的奇数位和偶数位

其实我感觉两种方法差不太多,但下面的确实精简一点,同时还运用了函数,可以让代码层次更加清晰。我的想法是创建两个数组分别来接受奇数和偶数,再用一个for循环实现代码的录入。怎么说呢,任务确实完成了,但最后的表现形式让我不是很满意。printf("奇数位:\n");printf("偶数位:\n");但其实获得一个数的最低位的方法不止a%2。比如我要实现对9这个数的这样一个操作。虽然我写的代码能完成功能实属不易。很奇怪,因为这两个1都是低位的。小白上路,如有错误,还望指正。至此我完成了对自己的救赎。

2023-09-29 11:22:25 37 2

原创 计算两个数二进制位上有几个不同的位

结合上一篇提到的算法,可以得出以下代码。而异或后得到的数只需统计其中1的个数。小白上路,如有错误,还望指正。相同与不同首选异或操作。

2023-09-29 10:32:41 36 1

原创 计算一个数二进制表示中1的个数

n和n-1按位与操作可以实现对n二进制表示中最右边的1的一个消除。这个代码优势在于有几个1就循环几次,较为精简。这个是一开始写的,似乎是最笨的一个。如果换成while循环似乎精简一点。基于这个发现有以下这个改良的代码。小白在代码学习中的一些记录。然后发现一种比较神奇的算法。

2023-09-29 10:22:17 31 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除