java基础练习题
逢七过
在聚会中常玩的一种游戏, 数数字, 碰到带有7或7的倍数的数字就要过。使用java代码实现输入1-100中需要过的数字.
/*
解题:
循环1-100;
每个数字判断条件。
个位是否包含7 i % 10 == 7
十位是否包含7 i / 10 % 10 == 7
是否为7的倍数 i % 7 == 0
满足其中一个即输出
*/
public class SevenPass {
public static void main() {
for (int i = 1; i <= 100; i++) {
if (i % 7 == 0 || i % 10 == 7 || i / 10 % 10 == 7) {
System.out.println(i);
}
}
}
}
兔子的对数
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,
假如兔子都不死,问第二十个月的兔子对数为多少?第n个月又有多少。
/*
解题:
找出规律:
一月: 1对
二月: 1对
三月: 2对
四月: 3对
五月: 5对
这就是斐波那契数列。
从第三个月开始每个月的对数是 前两个月之和。 可以使用数组实现, 将 arr[0] 和 arr[1] 都设为1. 往下循环。
第n 个月完成一个方法来获取传入的月份的对应数。
*/
public class Fibinacci() {
public static void main(String[] args) {
// 使用动态初始化, 初始化一个长度为20 的数组, 表示20个月
int[] arr = new int[20];
// 第一个月和第二个月确定对数为1
arr[0] = 1;
arr[1] = 1;
// 从第三个月开始循环
for (int i = 2; i < arr.length; i++) {
// i - 2 表示 上上月, i - 1 表示 上个月
arr[i] = arr[i - 2] + arr[i - 1];
}
// 输出最后一个, 最后一项的索引是数组长度 - 1;
System.out.println(arr[19]);
int n = 13;
printFibinacci(13);
}
// 完成方法 输出第 n 个月的斐波那契数列
public static void printFibinacci(int n) {
if (n < 0) {
System.out.println("你传入的数字有误");
} else if (n == 1 || n == 2) { // 第一个月和第二个月是固定的1
System.out.println(1);
} else {
// 定义长度为n 的数组
int[] arr = new int[n];
arr[0] = 1;
arr[1] = 1;
for(int i = 2; i < n; i++) {
arr[i] = arr[i - 2] + arr[i - 1];
}
System.out.println(arr[n - 1]);
}
}
}
百钱百鸡
我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。
百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?也就是怎样花光100块刚好买到100只鸡?
/*
解题:
先分别设定公鸡, 母鸡, 小鸡的个数为 x, y, z
钱全部花光的条件: 5x + 3y + z / 3 == 100;
x的范围: 0 < x <= 20;
y的范围: 0 < y <= 33;
z的值: z = 100 - x -y;
使用循环嵌套来解决
*/
public class BuyChicken {
public static void main(String[] args) {
for (int x = 0; x <= 20; x++) {
for (int y = 0; y <= 33; y++) {
int z = 100 - x -y;
// 使用条件判断是否刚好将钱花光, 并且小鸡的个数是3的倍数
if (5 * x + 3 * y + z / 3 == 100 && z % 3 == 0) {
System.out.println(x + "," + y + "," + z);
}
}
}
}
}
数组反转
完成一个方法, 是传入的数组反转, 如将[ 1,2,3 ] 改为 [3, 2, 1]。
/*
解题:
循环数组 ,第一位和倒数第一位交换位置, 第二位和倒数第二位交换位置 ... 直到中间
*/
public class ArrayDemo() {
public static void main(String[] args) {
}
// 反转方法
public static void reverseArray(int[] arr) {
for(int start = 0, end = arr.length - 1; start < end; start++, end--) {
int temp = arr[start]; // 临时保存
arr[start] = arr[end];
arr[end] = temp;
}
}
}
评委打分
有6个评委为依次输入分数 ,分数为0-100的整数分。
选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值 (不考虑小数部分)。
/*
解题:
使用Scanner包来监听用户输入, 定义数组保存分数, 循环数组进行输入操作。
完成 求数组最大值方法, 求数组最小值方法, 数组求和方法。
使用方法, 得到最大值, 最小值和总和, 最后计算平均分
*/
import java.util.Scanner
public class RateDemo() {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr = new arr[6];
for(int i = 0; i < arr.length; i++) {
System.out.println("请第" + (i + 1) + "个评委进行评分");
arr[i] = sc.nextInt();
}
// 调用方法获取对应值
int max = getMax(arr);
int min = getMin(arr);
int sum = getSum(arr);
int result = (sum - min - max) / 4;
System.out.println("这位选手的平均分是: " + result + "分");
}
// 数组最大值方法
public static int getMax(int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (max < arr[i]) {
max = arr[i];
}
}
return max;
}
// 数组最小值方法
public static int getMin(int[] arr) {
int min= arr[0];
for (int i = 1; i < arr.length; i++) {
if (min > arr[i]) {
min = arr[i];
}
}
return min;
}
// 数组求和方法
public static int getSum(int[] arr) {
int sum = 0;
for(int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
}