You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ECPC竞赛备考:给定正整数N,求同时被2和N整除的最小正整数的C++ for循环实现疑问

解决寻找同时被2和N整除的最小正整数问题

嘿,祝你明天的ECPC竞赛一切顺利!咱们来快速搞定这个问题。

首先,先明确问题:你要找的是能同时被2和给定正整数N整除的最小正整数,这其实就是数学里的最小公倍数(LCM)。不过既然你想用for循环来实现,我们先把循环部分补全,再给你讲讲更高效的竞赛思路。

补全for循环的实现

你的核心需求是补全for循环的条件,我们可以这样做:

  • 循环变量i从1开始(或者从N开始更高效),每次递增1
  • 循环继续的条件是:当前i不满足同时被2和N整除
  • 一旦满足条件,就退出循环并输出i

完整代码如下:

#include <iostream>
using namespace std;
int main() {
    int n;
    cin >> n;
    // 从1开始遍历,直到找到符合条件的i
    for(int i = 1; !(i % 2 == 0 && i % n == 0); i++) {
        // 循环体不需要执行任何操作,只需要递增i即可
    }
    cout << i << endl;
    return 0;
}

如果想优化循环的起始点(减少循环次数),可以把i的初始值设为n——因为最小公倍数不会比N更小(除非N=1,这时候最小是2,循环也会很快找到):

#include <iostream>
using namespace std;
int main() {
    int n;
    cin >> n;
    int i = n;
    // 从n开始,直到找到符合条件的数
    for(; !(i % 2 == 0 && i % n == 0); i++) {}
    cout << i << endl;
    return 0;
}

竞赛更高效的写法(不用循环)

在编程竞赛里,时间效率很重要,其实我们可以直接通过数学判断得出结果,不用循环:

  • 如果N是偶数,那N本身就能被2和自己整除,所以最小数就是N
  • 如果N是奇数,那最小数就是2*N(因为奇数不能被2整除,乘以2后既能被2整除,也能被N整除)

代码实现如下:

#include <iostream>
using namespace std;
int main() {
    int n;
    cin >> n;
    int result = (n % 2 == 0) ? n : 2 * n;
    cout << result << endl;
    return 0;
}

这种写法没有循环,时间复杂度是O(1),在竞赛里遇到大数据量时会更高效。

内容的提问来源于stack exchange,提问作者MazenLovesCoding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 06:52:45