算法题中的常用函数小结

算法题中的常用自定义函数

今天,我们来总结下算法题中常用的一些函数,这些函数需要我们自己去写的,现在来总结以下,方便以后做题的时候用。

1.判断素数

bool isPrime(int n)
{
	bool flag = true;
	if (n == 1 || n == 0)
	{
		flag = false;
	}
	for (int i = 2; i <= sqrt(n); i++)
	{
		if (n % i == 0)
		{
			flag = false;
		}
	}
	return flag;
}

这个效率是很高的,节约了一般的时间,不用全部遍历,别忘了加上头文件 “include <cmath>”

2.判断闰年

闰年条件:

是4的倍数但不是100的倍数,或者是400的倍数

// 判断是否为闰年
bool isLeapYear(int y)
{
	return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);	
} 

3.判断日期

const int month[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},//定义了二维数组,平年2月28天,闰年2月29天
				{0,31,29,31,30,31,30,31,31,30,31,30,31}};
// 判断是否为日期
bool isDate(int s) // s为日期,格式:yyyymmdd
{
	int y, m, d;
	bool flag = false;
	y = s / 10000;   // 得到年份 
	m = (s/100) % 100; // 得到月份 
	d = s % 100;  // 得到日 
	if (y > 0 && m > 0 && m <= 12)
	{
		if (d <= month[isLeapYear(y)][m]) // 判断日期是否正确 
		{
			flag = true; 
		}	
	}	
	return flag;
} 

4.最大公因数和最小公倍数

// 最大公因数
//函数递归调用
int gcd(int a, int b) {
	if (a % b == 0) {
		return b;
	}
	else {
		return gcd(b, a % b);
	}
}
// 最小公倍数 = a * b / gcd(a, b);
k = a / gcd(a, b) * b;

5.判断回文

// 判断回文
bool isHW(int num)
{
	int t = num, r = 0;
	while (num)
	{
		r = r * 10 + num % 10; // 让r为num的逆序 
		num /= 10;	
	}	
	if (r == t)
		return true;
	else
		return false;
} 

6.求最长公共子序列长度 LCS

const int maxlen = 1010;
char s1[maxlen], s2[maxlen]; 
int dp[maxlen][maxlen]; // dp[i][j]为串s1的前i个字符和串s2的前j个字符的最大公共子串长度                         0,                                   ②

int main()
{
	int i, j;
	int len1, len2, ret; // ret记录结果 
	cin >> s1 >> s2;
	memset(dp, 0 , sizeof(dp)); // 初始化,刚开始LCS长度均为0 
	len1 = strlen(s1) ;
	len2 = strlen(s2);
	ret = 0;
	for (i = 0; i < len1; i++)
	{
		for (j = 0; j < len2; j++)
		{
			if (s1[i] == s2[j])
			{
				dp[i + 1][j +1] = dp[i][j] + 1;
			}
			else
			{
				dp[i + 1][j + 1] = 0;
			}
			ret = max(ret, dp[i + 1][j + 1]); // 随时更新最大值 
		}
	}
	cout << ret;
	return 0; 
}

meset 用法 : (string.h)
C 库函数 void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。

sizeof 用法: sizeof (data type) C++中的运算符

重点:

if (s1[i] == s2[j])
{
	dp[i + 1][j +1] = dp[i][j] + 1;
}
else
{
	dp[i + 1][j + 1] = 0;
}
ret = max(ret, dp[i + 1][j + 1]); // 随时更新最大值 

以上就是本人总结的一部分,若有疑问,可以评论或者私聊我(如果觉得本文不错的话,请点个赞,哈哈哈)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值