0
点赞
收藏
分享

微信扫一扫

【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列



学习指引

  • ​​序、专栏前言​​
  • ​​一、【例题1】​​
  • ​​2、解题思路​​
  • ​​3、模板代码​​
  • ​​1、方法1​​
  • ​​1、方法2​​
  • ​​4 、代码解析​​
  • ​​二、【例题2】​​
  • ​​2、解题思路​​
  • ​​3、模板代码​​
  • ​​1、方法1​​
  • ​​2、方法2​​
  • ​​4 、代码解析​​
  • ​​三、推荐专栏​​
  • ​​四、课后习题​​

序、专栏前言

   本专栏开启,目的在于帮助大家更好的掌握学习​​Java​​​,特别是一些​​Java学习者​​难以在网上找到系统地算法学习资料帮助自身入门算法,同时对于专栏内的内容有任何疑问都可在文章末尾添加我的微信给你进行一对一的讲解。
   但最最主要的还是需要独立思考,对于本专栏的所有内容,能够进行完全掌握,自己完完全全将代码写过一遍,对于算法入门肯定是没有问题的。
   算法的学习肯定不能缺少总结,这里我推荐大家可以到​​​高校算法社区​​​将学过的知识进行打卡,以此来进行巩固以及复习。
  学好算法的唯一途径那一定是题海战略,大量练习的堆积才能练就一身本领。专栏的任何题目我将会从【题目描述】【解题思路】【模板代码】【代码解析】等四板块进行讲解。

一、【例题1】

  给定一个整数 【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_等差数列,请你输出从【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_算法_02的值。

2、解题思路

  题目难度:⭐️

  朴素的想法,肯定是循环把区间【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_等差数列_03的每一个数都加上,这样的复杂度很明显是【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_等差数列_04级别。但很明显该数列是一个公差为【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_开发语言_05的等差数列,如果我们使用高中学过的等差数列前【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_java_06项和公式,首项为【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_等差数列_07,公差为【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_开发语言_08的前【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_java_06项和公式为:
【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_开发语言_10
  在公差为【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_开发语言_05的情况下可以优化为:
【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_等差数列_12
  在更为特殊的公差和首项都为【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_开发语言_05的情况下:
【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_java_14

3、模板代码

1、方法1

import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int res=0;
for (int i = 1; i <=n; i++) {
res+=i;
}
System.out.println(res);
}
}

1、方法2

import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println(n*(n+1)/2);
}
}

4 、代码解析

  • 【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_开发语言_15方法【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_java_16采用朴素的办法进行累加,时间复杂度达到【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_算法_17,复杂度过高不太可取。
  • 【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_算法_18方法【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_算法_19是直接采用等差数列的求和公式直接得到答案,时间复杂度为【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_等差数列_20

【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_开发语言_21

二、【例题2】

  给定多组输入数据,每次给定一个整数 【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_开发语言_22,请你输出从【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_算法_02的值。

2、解题思路

  题目难度:⭐️

  咋一看,貌似和上题没什么区别。但 【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_java_06 的数据范围大了很多,而一道题目是否难,数据范围是一个非常重要的参考因素。在我们的等差数列求和公式中,我们先进行了【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_开发语言_25的操作,在【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_java_06足够大的情况下,是有可能爆​​​int​​,造成整数溢出变成负数,所以我们需要做出一些调整。

3、模板代码

1、方法1

import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNext()){
long n=sc.nextLong();
System.out.println(n*(n+1)/2);
}
}
}

2、方法2

import java.util.Scanner;
public class test222 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNext()){
int n=sc.nextInt();
if (n%2==0) System.out.println(n/2*(n+1));
else System.out.println((n+1)/2*n);
}
}
}

4 、代码解析

  • 【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_开发语言_15方法【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_java_16中,由于可能爆​​​int​​​,我们可以把​​n​​​转换成​​long​​​来使用,这样使用等差数列的过程中就不怕了,​​long​​的取值范围足够我们使用。
  • 【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_算法_18再考虑方法2,在我们等差数列的求和公式【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_等差数列_30中,有一个除​​​2​​​的步骤,如果我们能先执行该步骤,就能将【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_java_31或者【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_数据结构_32其中的一个值降下来,就不会超出​​​int​​取值范围。
  • 【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_数据结构_33所以我们应该对此进行分类,当​​​n​​​为奇数时:【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_等差数列_34
  • 当​​n​​为偶数时:
  • 【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_算法_35
  • 【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_等差数列_36因为​​​n​​​和​​n+1​​​的奇偶性不同,相乘一定为偶数。当如果需要先进行除以​​2​​​的操作,必须得使用偶数去除。当​​n​​​为偶数则使用​​n​​​,当​​n​​​为奇数说明​​n+1​​​是偶数则使用​​n+1​​。
  • 【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_开发语言_37​​​long​​​类型是​​Java​​​的一个基本数据类型,比​​int​​​的储存范围要大一个量级。达到了【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_开发语言_38
    【第08天】给定整数 n,求1 + 2 + 3 + ...+ n的和 | 等差数列_开发语言_39

举报

相关推荐

24 求等差数列

0 条评论