Acwing第71场周赛
分析:因为输入必须是合理的,所以x和y分别取到最大值b和c,z取到最小值c,这样x、y的和一定是能满足大于z的,直接输出我们的输入就ok。
代码:
#include<iostream>
using namespace std;
int main(){
int a,b,c,d;
cin >> a >> b >> c >> d;
cout << b << " " << c << " " << c;
return 0;
}
分析:分成两种情况:
第一,如果n为质数,f(n) = 1;
第二,如果n不是质数,根据哥德巴赫猜想,每个不小于6的偶数都可以拆成两个奇质数之和,任何一个大于7的奇数都能被表示成三个奇质数的和,且在范围内成立。所以此时:
①当n为2时,f(n) = 1;
②当n为大于等于4的偶数时,f(n) = 1 + 1 = 2;
③当n为奇合数时,n 被拆开一定是一个奇数一个偶数,如果 n 可以拆为两个质数的和,那么偶质数一定为2,此时只需要判断n - 2是否为质数。a.如果 n - 2 为质数,那么该奇合数就可以被拆为两个质数的和,此时 f(n) = 2。b.如果 n - 2 不是质数,再次根据哥德巴赫猜想,此时 f(n - 2) = 2;所以此时 f(n) = 1 + 2 = 3。
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
bool is_prime(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 (is_prime(n)) puts("1");
else if (n % 2 == 0 || is_prime(n - 2)) puts("2");
else puts("3");
return 0;
}
Leetcode第313场周赛
第一题:2427. 公因子的数目
分析:定义一个cnt计数,从1开始枚举,既能被a整除又能被b整除时cnt ++,最后返回。
代码:
class Solution {
public:
int commonFactors(int a, int b) {
int cnt = 0;
for(int i = 1;i < a + b;i ++){
if(a % i == 0 && b % i == 0)cnt ++;
}
return cnt;
}
};
第二题:2428. 沙漏的最大总和
分析:本题数据范围较小,选择一个参考点,直接遍历所有可能的沙漏进行暴力枚举。
代码:
class Solution {
public:
int maxSum(vector<vector<int>>& grid) {
int ans = 0;
int m = grid.size();
int n = grid[0].size();
for(int i = 0;i <= m -3;i ++)
{
for(int j = 0;j <= n -3;j ++)
{
int sum = 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];
//cout<<sum<<endl;
ans = max(ans,sum);
}
}
return ans;
}
};