展开全部
我这e68a8462616964757a686964616f31333337616631里简单解释一下,对于n以内的偶数的个数为n/2,这里有人也许会怀疑n=1时,n/2=0.5啊,这里Java中整数的除法相当于向下取整,n/2=0,因此,这个写法是没有问题的;但是对于偶数n=4时,带入4/2=2,出问题了,4以内的偶数只有一个2,这里算出来是两个,怎么解决,这里采用对n-1,之后再除以2的算法,把奇数带入,发现是没有问题的。
这里我们假设int half = (n-1)/2,此时的half就是偶数的个数。
则此时要求的和int sum = (2+4+...+2*half),此时发现公因子2,对吧,提出来结果就变为下面的形式:sum = 2(1+2+...+half);对于后面括号里的内容,好熟悉啊,对吧,等差为1的等差数,列带入公式(1+2+...+half)=(1+half)*half/2;如果忘记了那就想一下1到10求和的方法,好的,到此时我们括号里的内容用下面的部分代替:sum=2*(1+half)*half/2;之后把这个式子中多余的2消去,得到sum=(1+half)*half。到这里我们的理论上的支撑结束,简单总结一下上述过程:
0. 输入正整数n;求出half=(n-1)/2;
求出sum=(1+half)*half;
输出sum;
整个代码的过程如下:import java.util.Scanner;
public class SumEven {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入一个正整数");
int n = sc.nextInt();
int half = (n-1)/2;//n以内的所有的整数的一半,若包含n,此处不减一
int sum = (1+half)*half;//求和,利用数学中的等差数列求和公式,化简后的结果
System.out.println(n+"以内的偶数的和为:"+sum);
}
}
结果如下:
输入一个正整数
10
10以内的偶数的和为:20
最后再说一下,这个算法的效率要比循环判断的效率高一些