力扣
一.公因子的数目
1.原题链接:力扣
2.解题思路:
取a, b中较小值,若满足条件则ans++,最后输出ans即可。
3.参考代码:
class Solution {
public:
int commonFactors(int a, int b) {
int c = min(a, b);
int ans = 0;
for(int i = 1; i <= c; i++){
if(a % i == 0 && b % i == 0)ans++;
}
return ans;
}
};
二.沙漏的最大总和
1.原题链接:力扣
2.解题思路:
遍历沙漏,用res 存储满足条件的元素的总和,若遇到更大的res,则更新,最后输出ans即可。
3.参考代码:
class Solution {
public:
int maxSum(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
int ans = 0;
int res = 0;
for(int i = 0; i < m - 2 ; i++){
for(int j = 0; j < n - 2; j++){
res = grid[i][j] + grid[i][j+1] + grid[i][j+2] + grid[i+1][j+1] + grid[i+2][j] + grid[i+2][j+1] + grid[i+2][j+2];
ans = max(ans,res);
}
}
ans = max(ans, res);
return ans;
}
};
AcWing
一.三个整数
1.原题链接:4621. 三个整数 - AcWing题库
2.解题思路:
将b赋值给x, c赋值给y和z, 由于a, b, c 都大于0,则一定满足x + y > z;输出 x, y, z 即可。
3.参考代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int a, b, c, d;
cin >> a >> b >> c >> d;
int x, y, z;
x = b, y = c, z = c;
cout << x << " " << y << " " << z << endl;
return 0;
}
二.整数拆分
1.原题链接:4622. 整数拆分 - AcWing题库
2.解题思路:
f(x)表示整数 x 的除本身之外的最大因数,那么当x为质数时,f(x)=1,所以这一题其实就是让我们用最少的质数相加得到x,质数的个数就是这一题的答案。那么当x为质数时,f(x)直接就等于1,不用拆分。
当x为偶数时,根据哥德巴赫猜想:对于任意一个大于2的偶数都可以拆分成两个质数之和。所以当x为偶数时,结果就是2。
当x为奇数时,要再分情况考虑,如果x-2是一个质数,那么我们把x拆分成x-2和2就可以得到最小的结果,结果是2;如果x-2不是质数,我们就可以把x拆分成3和一个偶数,这样的结果是3。
3.参考代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
bool check(int x)
{
for (int i = 2; i <= x / i; i++)
{
if (x % i == 0)return false;
}
return true;
}
int main()
{
int n;
cin >> n;
if(check(n))cout << 1;
else if(n % 2 == 0)cout << 2;
else if(check(n - 2))cout << 2;
else cout << 3;
return 0;
}