本篇内容是对循环结构进行复盘的,循环可谓是在基础阶段特别重要的东西,是三大结构(顺序结构、选择结构、循环结构)中最重要的结构之一。
1.找最小值
分析:
知识点:
代码如下
2.打分
分析:
知识点:
代码如下
3.质数口袋
分析:
知识点:
代码如下
4.阶乘之和
分析:
知识点:
代码如下
总结
题目描述
给出 n 和 n 个整数,求这 n 个整数中最小值是什么。
输入格式
第一行输入一个正整数 n,表示数字个数。
第二行输入 n 个非负整数,表示 a1,a2…an,以空格隔开。
输出格式
输出一个非负整数,表示这 n 个非负整数中的最小值。
输入输出样例
输入 #1
8 1 9 2 6 0 8 1 7输出 #1
0说明/提示
数据保证,n≤100 且 0≤an≤1000。
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int arr[]=new int[n];
for (int i = 0; i < n; i++) {
arr[i]=sc.nextInt();
}
// 求最小值
int min=0;
for (int i=1;iarr[i])
min=i;
}
System.out.println(arr[min]);
题目描述
现在有n(n≤1000) 位评委给选手打分,分值从 0到 10。需要去掉一个最高分,去掉一个最低分(如果有多个最高或者最低分,也只需要去掉一个),剩下的评分的平均数就是这位选手的得分。现在输入评委人数和他们的打分,请输出选手的最后得分,精确到 2 位小数。
输入格式
第一行输入一个正整数 n,表示有 n 个评委。
第二行输入 n 个正整数,第 i 个正整数表示第 i 个评委打出的分值。
输出格式
输出一行一个两位小数,表示选手的最后得分。
输入输出样例
输入 #1
5 9 5 6 8 9输出 #1
7.67说明/提示
数据保证,3≤n≤1000,每个评委打出的分值为为 0到 10(含 0 与 10)之间的整数。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int arr[]=new int[n];
double sum=0;
for (int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
sum+=arr[i];
}
Arrays.sort(arr);
System.out.println(String.format("%.2f",(sum-arr[0]-arr[arr.length-1])/(n-2)));
}
}
题目描述
小 A 有一个质数口袋,里面可以装各个质数。他从 2 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。
口袋的负载量就是口袋里的所有数字之和。
但是口袋的承重量有限,装的质数的和不能超过 L。给出 L,请问口袋里能装下几个质数?将这些质数从小往大输出,然后输出最多能装下的质数的个数,数字之间用换行隔开。
输入格式
一行一个正整数 L。
输出格式
将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。
输入输出样例
输入 #1
100输出 #1
2 3 5 7 11 13 17 19 23 9输入 #2
5输出 #2
2 3 2输入 #3
11输出 #3
2 3 5 3说明/提示
数据保证,1≤L≤105。
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 装入的容量
int n = sc.nextInt();
// 记录可以装入的个数
int count = 0;
// 当前的累加和
int sum = 0;
// 素数的初始值
int i = 2;
while (true) {
if (trial(i)) {
if (sum + i <= n) {
System.out.println(i);
// 累加sum
sum += i;
// count累加
count++;
} else {
break;
}
}
// 控制i的增加
i++;
}
System.out.println(count);
}
// 判断素数
static boolean trial(int x) {
if (x % 2 == 0 && x != 2)
return false;
for (int i = 2; i <= Math.sqrt(x); i++) {
if (x % i == 0)
return false;
}
return true;
}
}
题目描述
用高精度计算出 !S=1!+2!+3!+⋯+n!(n≤50)。
其中
!
表示阶乘,定义为n!=n×(n−1)×(n−2)×⋯×1。例如5!=5×4×3×2×1=120。输入格式
一个正整数 n。
输出格式
一个正整数 S,表示计算结果。
输入输出样例
输入 #1
3输出 #1
9说明/提示
【数据范围】
对于 100%的数据,1≤n≤50。
本题要求是求出n的阶乘,由于int型和long型无法满足题目给出的要求,如果贸然使用会出现溢出的情况。
我们就需要使用java中的高精度类型BigInteger类,进行阶乘的操作。
BigInteger类常用的方法:
BigInteger类静态常量:
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
BigInteger sum=new BigInteger("0");
int n=sc.nextInt();
BigInteger result=new BigInteger("1");
for (int i = 1; i <= n; i++) {
result=result.multiply(new BigInteger(String.valueOf(i)));
sum=sum.add(result);
}
System.out.println(sum);
}
}
本篇的复习要点:
- for循环和while循环体的基本结构。
- 素数的判断方法。
- 高精度BigInteger类的使用。