NO.1
代码实现:
#include <iostream>
using namespace std;
int gcd(int x,int y)
{
if(y==0) return x;
return gcd(y,x%y);
}
int main() {
int n,a;
while(cin>>n>>a)
{
int b;
for(int i=0;i<n;i++)
{
cin>>b;
if(a>=b) a+=b;
else a+=gcd(a,b);
}
cout<<a<<endl;
}
}
NO.2
思路:动态规划。
代码实现:
class Solution {
int dp[210][210]={ 0 };
public:
int maxValue(vector<vector<int> >& grid) {
int m=grid.size(),n=grid[0].size();
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
dp[i][j]=max(dp[i-1][j],dp[i][j-1])+grid[i-1][j-1];
}
}
return dp[m][n];
}
};
NO.3
思路:哈希,记录输入每个字符串的字符,定义一个left指向最开始的字符串,right指向最后的字符串,如果这两个字符串在哈希表中都有相同的字符,就再left++,right–,如果没有就跳出循环,判断一下此时的left和right的大小,如果left<right,说明已经跳出循环没有相同字符输出No,如果left>=right就输出Yes。最后我们需要memset函数来清空数组,多组输入的时候,全局变量需要清空。
代码实现:
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int t,n;
string s;
bool vis[110][26];
bool check(int left,int right)
{
for(int i=0;i<26;i++)
{
if(vis[left][i]&&vis[right][i])
return true;
}
return false;
}
int main()
{
cin>>t;
while(t--)
{
memset(vis,0,sizeof vis);
cin>>n;
for(int i=0;i<n;i++)
{
cin>>s;
for(auto ch:s)
{
vis[i][ch-'a']=true;
}
}
int left=0,right=n-1;
while(left<right)
{
if(!check(left,right)) break;
left++;
right--;
}
if(left<right) cout<<"No"<<endl;
else cout<<"Yes"<<endl;
}
return 0;
}