java题,键盘输入一个整数n,求n以内所有偶数的和。求速解

在线求帮请教一下,java题,键盘输入一个整数n,求n以内所有偶数的和。求速解
最新回答
夙词欢

2024-09-14 01:43:38

我这里简单解释一下,对于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;

  1. 求出half=(n-1)/2;

  2. 求出sum=(1+half)*half;

  3. 输出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

最后再说一下,这个算法的效率要比循环判断的效率高一些

一念花开

2024-09-14 05:25:17

import java.util.Scanner;

public class AddNums {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入一个整数");
int x = sc.nextInt();
int sum = 0;
//如果不包含x,     那么i<x
for (int i = 0; i <= x; i++) {
if (i % 2 == 0) {
sum = i + sum;
}
}
System.out.println(x+"以内的偶数和是:"+sum);
}
}

 输出

输入一个整数
10
10以内的偶数和是:30
追问
非常谢谢你,不过我搞错了,要用while语句实现,能再来下吗?拜托了
龇牙咧嘴你干哈

2024-09-14 07:40:51

int x=2, s=0;
while(x<n){
s+=x;
x+=2;
}