基础算法归纳

#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;
	}
}