经典算法
永不过时,深谙于心。
.阿Q.
干净 · 温暖 · 自律 · 专注 · 情绪稳定 · 坚持 · 乐观 · 谦逊
展开
-
判断素数的快速算法 sqrt()
我们在日常判断素数的程序中常用到如下代码//判断数num是不是素数for(i=2;i<num;i++){ if(num%i==0) return 0; return 1;}这样写无疑是没有问题的,但是我们实际做题可能会有算法时间复杂度的要求,或者说数据大的时候我们会等很久,算法效率低,那么有没有一种好的算法可以更快地判断是不是素数呢?当然了,先附上代码段//判断数num是不是素数for(i=2;i<=sqrt(num);i++){原创 2021-07-18 17:03:36 · 6136 阅读 · 2 评论 -
打印100~200之间的素数
第一种#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int main() { for (int i = 100; i <= 200; i++) { int n = 0; for (int j = 1; j < sqrt(i); j++) { if (i % j == 0) { n++; } } if (n == 1) { printf("%d ", i); } } ret原创 2021-07-23 08:18:22 · 75 阅读 · 0 评论 -
字符串左旋
实现一个函数,可以左旋字符串中的k个字符。例如:ABCD左旋一个字符得到BCDAABCD左旋两个字符得到CDABAC代码1:传值#include<stdio.h>void Left_circle(char* a, int n){ int i = 0; int len = strlen(a); char ret; n %= len; while (n--)//控制次数 { ret = a[0]; for (i = 0; i < len; i++)原创 2021-08-23 11:58:55 · 126 阅读 · 1 评论 -
统计一个数的二进制中 0, 1 个数
谷歌官方答案#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>size_t count_bit_one(int n){ int count = 0; while (n) { n = n & (n - 1); count++; } return count;}int main(){ int n = 0; scanf("%d", &n); size_t count = count_bit_one(原创 2021-08-12 21:05:31 · 150 阅读 · 0 评论 -
辗转相除法求【最大公约数】,进而求===>最小公倍数
求最大公约数算法:(1)辗转相除法有两整数a和b:① a%b得余数c② 若c=0,则b即为两数的最大公约数③ 若c≠0,则a=b,b=c,再回去执行①例如求27和15的最大公约数过程为:27÷15 余12 15÷12余3 12÷3余0 因此,3即为最大公约数辗转相除算法:int main(){ int a, b, c; scanf("%d %d", &a, &b); c = a % b;...原创 2021-09-04 12:29:49 · 264 阅读 · 0 评论 -
经典算法之二分查找 优化算法:int mid = left + ((right - left) >> 1);
#include<stdio.h>int main(){ int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int k = 5; int sz = sizeof(arr) / sizeof(arr[0]);//计算数组中元素个数 int left = 0;//数组最左边数的下标 int right = sz - 1;//数组最右边数的下标 while (left <= right)//防止交叉 { int mid = (lef.原创 2021-07-21 23:10:44 · 1899 阅读 · 3 评论