学习指引

序、专栏前言

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

一、【例题1】

1、题目描述

  给定整数 【第16天】给定整数 n 和 n个正整数,输出它们的平均数_算法 ,和 【第16天】给定整数 n 和 n个正整数,输出它们的平均数_java_02 个正整数,请你输出它们的平均值,如果为整数则直接输出,小数则保留【第16天】给定整数 n 和 n个正整数,输出它们的平均数_浮点数_03位小数。【第16天】给定整数 n 和 n个正整数,输出它们的平均数_算法_04

2、解题思路

  求平均数那我们需要先统计所有数字之和​​sum​​​,然后去判断​​sum​​​是否能整除​​n​​​。如果可以则直接得到平均值 【第16天】给定整数 n 和 n个正整数,输出它们的平均数_浮点数_05【第16天】给定整数 n 和 n个正整数,输出它们的平均数_浮点数_05为整型。否则【第16天】给定整数 n 和 n个正整数,输出它们的平均数_浮点数_05应该为浮点数类型。
【第16天】给定整数 n 和 n个正整数,输出它们的平均数_java_08

3、模板代码

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 = 0; i < n; i++) {
res += sc.nextInt();
}
if (res % n == 0) System.out.println(res / n);
else {
double x = res * 1.0 / n;
System.out.printf("%.3f", x);
}
}
}

4、代码解析

  • 【第16天】给定整数 n 和 n个正整数,输出它们的平均数_开发语言_09​​​res​​​用来统计每个数的和,当​​res%n==0​​​说明​​res​​​是​​n​​的倍数,我们可以直接整除得到答案
  • 【第16天】给定整数 n 和 n个正整数,输出它们的平均数_算法_10计算​​​x​​​时,需要先乘一个浮点数​​1.0​​​,将被除数转化为浮点数类型,否则两个整数相除会产生精度损失。比如​​5​​​除以​​2​​​会得到​​2.000​​​,而​​5.0​​​除以​​2​​​则不会产生该问题,答案会是​​2.500​​。

二、【例题2】

1、题目描述

  给定整数 【第16天】给定整数 n 和 n个正整数,输出它们的平均数_算法 ,和 【第16天】给定整数 n 和 n个正整数,输出它们的平均数_java_02 个正整数,请你输出它们的平均值,如果为整数则直接输出,小数则保留【第16天】给定整数 n 和 n个正整数,输出它们的平均数_浮点数_03位小数。【第16天】给定整数 n 和 n个正整数,输出它们的平均数_浮点数_14

2、解题思路

  咋一看,与上一题一致,但我们应该仔细考虑数据范围,​​n​​​的范围是​​1e5​​​,而每个数的值区间是【第16天】给定整数 n 和 n个正整数,输出它们的平均数_c语言_15。当​​​n​​​取最大,且每个数都取极值的情况下,总和​​res​​​的取值范围是【第16天】给定整数 n 和 n个正整数,输出它们的平均数_浮点数_16。这已经超出了​​​int​​​类型的取值范围了,为了防止出错,我们需要使用更大的​​long​​类型。

3、模板代码

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
//统计总和
long res = 0;
for (int i = 0; i < n; i++) {
res += sc.nextInt();
}
if (res % n == 0) System.out.println(res / n);
else {
double x = res * 1.0 / n;
System.out.printf("%.3f", x);
}
}
}

4、代码解析

  • 【第16天】给定整数 n 和 n个正整数,输出它们的平均数_开发语言_09思路与前面一致,只要在于发现可能爆​​​int​​​的问题,转而使用​​long​​​存储总和。【第16天】给定整数 n 和 n个正整数,输出它们的平均数_浮点数_18