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
相关产品推荐
相关产品推荐

