如何用for循环正确统计范围内某因子的倍数数量?(C#入门)
问题:统计指定范围内因子的倍数数量
给定三个整数start、end和factor,使用循环统计start到end(包含两端)之间factor的倍数数量。例如start=14、end=35、factor=3时,结果应为7。
你的尝试代码存在的问题
第一个代码
public static int Test1(int start, int end, int factor) { for(int i = start; i <= end; i++) { int result = i % factor; { return i; } } return 0; }
- 逻辑完全错误:计算
i%factor后未判断是否为0,且第一次循环就直接返回i,完全没有统计倍数数量,仅返回了起始值。
第二个代码
public static int Test1(int start, int end, int factor) { for(int i = 0; start <= end; i++) { if(start + factor <= end) { factor++; continue; } else { return i; } } return 0; }
- 非法修改输入参数
factor,破坏了原始输入; - 循环条件
start <= end未被修改(除非初始start > end),会触发无限循环; - 逻辑完全偏离需求,和统计倍数无任何关联。
第三个代码
public static int Test1(int start, int end, int factor) { for (int i = 0; start <= end; i++) { if (start + factor < end) { start+=factor; } else { return i; } } return 0; }
- 未处理
start本身不是factor倍数的情况(比如例子中14不是3的倍数,第一个有效倍数是15,但代码从14开始累加); - 条件判断
start + factor < end错误,应该用<= end,会漏掉最后一个符合条件的数; - 计数逻辑不准确,无法得到正确的倍数数量。
正确的实现方案
方案1:遍历每个数统计(适合新手理解)
遍历范围内的每个数,判断是否是factor的倍数,是则计数器加1:
public static int Test1(int start, int end, int factor) { int count = 0; // 遍历start到end的所有整数 for (int i = start; i <= end; i++) { // 判断当前数是否能被factor整除(即是否是factor的倍数) if (i % factor == 0) { count++; } } return count; }
方案2:优化循环(效率更高)
无需遍历每个数,直接找到第一个大于等于start的factor倍数,然后每次累加factor直到超过end,循环次数更少:
public static int Test1(int start, int end, int factor) { int count = 0; // 计算第一个大于等于start的factor倍数 int firstMultiple = ((start + factor - 1) / factor) * factor; // 从第一个倍数开始,每次加factor,直到超过end for (int current = firstMultiple; current <= end; current += factor) { count++; } return count; }
两种方案都能正确得到结果,比如测试start=14、end=35、factor=3时,都会返回7。
内容的提问来源于stack exchange,提问作者Sean Wolf
相关产品推荐
相关产品推荐

