力扣第313场周赛+AcWing第71场周赛补题

力扣

一.公因子的数目

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值