|
发表于 2021-2-17 18:16:08
|
显示全部楼层
本帖最后由 李京 于 2021-2-17 18:17 编辑
方法2比方法1少循环了将近400次 而且不用判断
但是,加减上多了一百多次
我也不知道,那个效率高
还有其他方法请讲解思路
- #include <stdio.h>
- int f1(int n);//方法1
- int f2(int n);//方法2
- int f1(int n)
- {
- int i, num = 0,cont1=0;//cont1统计num 加的次数
- for (i = 1; i < n; i++)//直接遍历所有
- {
- if (i % 3 == 0 || i % 5 == 0)
- {
- cont1++;
- num += i;
- }
- }
- printf("cont1 = %d\n", cont1);
- return num;
- }
- int f2(int n)//思路 不是要判断3和5的倍数吗 直接+3和+5就行了,然后再把重复加的减掉
- {
- int i=1, num = 0,cont=0;//cont统计加的次数
- for (i = 3; i < n; i+=3)//这里是加上所有3的倍数
- {
- num += i;
- cont++;
- }
- for (i = 5; i < n; i += 5)//这里是加上所有5的倍数
- {
- num += i;
- cont++;
- }
- for (i = 15; i < n; i += 15)//这里是减掉重复加的数
- {
- num -= i;
- cont++;
- }
- printf("cont = %d\n", cont);
- return num;
- }
- int main(void)
- {
- int n;
- int num,num2;
- scanf("%d", &n);
- num = f2(n);
- num2 = f1(n);
- printf("%d %d",num,num2);
- return 0;
- }
复制代码 |
|