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

C++使用for循环打印[a,b]区间奇数的其他代码实现方法咨询

其他for循环实现方案整理

以下所有方案都严格遵循用for循环实现的要求,你可以根据实际场景选择:


写法1:步长优化版(效率最高)

核心思路:不需要遍历区间内所有整数,先定位到区间第一个奇数,之后每次步进2,直接遍历所有奇数,省去每轮的奇偶判断逻辑,遍历次数直接减半。

#include <iostream>
#include <vector>
#include <algorithm> // 用于swap交换a、b处理反序输入的情况
using namespace std;

vector<int> odd_numbers(int a, int b) {
    vector<int> odd_numbers_list;
    // 处理用户输入a大于b的边界情况
    if (a > b) swap(a, b);
    // 找到区间内第一个奇数
    int start = (a % 2 == 1) ? a : a + 1;
    // 直接遍历所有奇数,步长为2
    for (int i = start; i <= b; i += 2) {
        odd_numbers_list.push_back(i);
    }
    return odd_numbers_list;
}

// 打印部分也可以用范围for简化,不用处理下标
void showList(const vector<int>& g) { // 加const引用避免拷贝vector,效率更高
    for (int num : g) {
        cout << num << "; ";
    }
    cout << endl;
}

int main() {
    cout << "input 2 numbers" << "\n";
    int a, b;
    cin >> a >> b;
    vector<int> x = odd_numbers(a, b);
    showList(x);
    return 0;
}

写法2:无临时存储版(轻量化场景使用)

核心思路:如果不需要后续使用奇数列表,完全可以省略vector存储环节,遍历过程中直接打印结果,节省内存开销。

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    cout << "input 2 numbers" << "\n";
    int a, b;
    cin >> a >> b;
    if (a > b) swap(a, b);
    // 直接在for循环中判断并打印
    for (int i = a; i <= b; i++) {
        if (i & 1) { // 位运算判断奇偶,等价于i%2!=0,执行效率更高
            cout << i << "; ";
        }
    }
    cout << endl;
    return 0;
}

小优化提示

  • 原代码中for (a; a < b + 1; a++)的初始条件写a是合法但可读性不好的写法,建议单独定义循环变量i,避免修改传入的形参值
  • 可以用位运算i & 1代替模2判断,对负数也能正确识别奇偶,执行效率更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:27:03