AcWing第71场周赛+Leetcode第313场周赛

Acwing第71场周赛

第一题AcWing 4621. 三个整数

分析:因为输入必须是合理的,所以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;
}

第二题AcWing 4622. 整数拆分

分析:分成两种情况:

第一,如果n为质数,f(n) = 1;

第二,如果n不是质数,根据哥德巴赫猜想,每个不小于6的偶数都可以拆成两个奇质数之和,任何一个大于7的奇数都能被表示成三个奇质数的和,且在2\times 10^{9}范围内成立。所以此时:

①当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;
        
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值