1.求最小公倍数 (pass)
求最小公倍数
技能:辗转相除法、递归
1.1 解析
1.2 代码
#include <iostream>
using namespace std;
int gcd(int a,int b)
{
if(b==0)return a;
else return gcd(b,a%b);
}
int main()
{
int a,b;
cin>>a>>b;
cout<<a*b/gcd(b,a%b)<<endl;
return 0;
}
2.数组中的最长连续子序列
数组中的最长连续子序列
技能:排序
2.1 解析
2.2 代码
int MLS(vector<int>& arr) {
int n=arr.size();
sort(arr.begin(),arr.end());//排序
int len=1;//结果
for(int i=0;i<n;)
{
int j=i+1;
int count=0;
while(j<n&& arr[j]-arr[j-1]<=1)
{
if(arr[j]-arr[j-1]==0)count++;
j++;
}
if(len<j-i-count)len=j-i-count;
i=j;
}
return len;
}
3.字母收集
字母收集
技能:二维dp
3.1 解析
3.2 代码
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int m,n;
cin>>m>>n;
vector<string> nums(m);
for(int i=0;i<m;i++)cin>>nums[i];
//1.创建dp表
vector<vector<int>> dp(m+1,vector<int>(n+1));
//2.填表
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if(nums[i-1][j-1]=='l')dp[i][j]=4;
else if(nums[i-1][j-1]=='o')dp[i][j]=3;
else if(nums[i-1][j-1]=='v')dp[i][j]=2;
else if(nums[i-1][j-1]=='e')dp[i][j]=1;
dp[i][j]+=max(dp[i-1][j],dp[i][j-1]);
}
}
//3.返回值
cout<<dp[m][n];
return 0;
}