基础算法归纳
#cs #c #算法
输出最大值
#include <stdio.h>
int main(void)
{
int i[3], max;
scanf("%d %d %d", &i[0], &i[1], &i[2]);//通过数组来代替不同变量
max = i[0];
for (int j = 1; j < n; j++)
{
if (max < i[j])
{
max = i[j];
}
}
printf("%d", max);
}
冒泡排序
void BubbleSort(int arr[], int n)//arr[] 在c中要用第一个数组值
{
int flag, tmp;
for (int i = 0; i < n - 1; i++)
{
flag = 0;
for (int j = 0; j < n - i -1; j++)
{
if (arr[j] > arr[j + 1])
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 1;
}
}
if (!flag)
return;
}
}
筛选素数
暴力搜索
bool isPrime(int n)
{
for (i = 2; i <= (int)sqrt(n); i++)
{//如果n被i整除,则返回false
if(n % i == 0)
{
return false;
break;
}
}
return true; // 反之则返回true
}
6n±1法: 高效
bool isPrime(int num)
{
if (num <= 3)
{
return num > 1;
}
// 不在6的倍数两侧的一定不是质数
if (num % 6 != 1 && num % 6 != 5)
{
return false;
}
int sqrt = (int)sqrt(num);
for (int i = 5; i <= sqrt; i += 6)
{
if (num % i == 0 || num % (i + 2) == 0)
{
return false;
}
}
return true;
}
逆序数
int fun(int num)
{
int S = 0;
while (num > 0)
{
S =(S + num % 10)*10;
num /= 10;
}
return S / 10;
}
最大公约数
int gcd(int a, int b)
{
if (a % b == 0)
return b;
else
return gcd(b, a % b);
}
寻找共同祖先
int common(int x, int y)
{
if (x == y)
return x;
if (x > y)
return common(x / 2, y);
return common(x, y / 2);
}
逆序输出 递归
void inverse(int n)
{
int num;
scanf("%d", &num);
if (n > 1)
{
inverse(n - 1);
printf("%d ", num);
}
if (n == 1)
printf("%d ", num);
}
四舍五入指定小数
printf("%.2f", (int)(num * 100 + 0.5) / 100.0);//num为浮点数
其他进制转换二进制
int kTod(char s[], int k)//k进制数s
{
int d = 0;
for (int i = 0; s[i] != '\0'; i++)
{
d = d * k + (s[i] - '0');
}
return d;
}
数组循环移位
void ringShift(char* a, int n, int k)
{
int x = k % n;
reverse(a, x);
reverse(a + x, n - x);
reverse(a, n);
}
void reverse(char* a, int n)
{
char tmp;
for (int i = 0, k = n / 2; i < k; i++)
{
tmp = *(a + i);
*(a + i) = *(a + n - 1 - i);
*(a + n - 1 - i) = tmp;
}
}