实例 36
题目
有 N 个整数,使其前面各数顺序向后移 M 个位置,最后 M 个数变成最前面的 M个数。
分析
首先是设置输入,输入数组及相关参数值之后,将原数组复制到新数组中,然后通过计算新位置和原来位置的关系 index = (i + m) % n,将原数组中的元素进行位置交换。
实现
import java.util.Arrays; import java.util.Scanner; /** * Created with IntelliJ IDEA. * * @author : cunyu * @version : 1.0 * @email : 747731461@qq.com * @website : https://cunyu1943.github.io * @date : 2021/6/4 14:34 * @project : Java 编程实例 * @package : PACKAGE_NAME * @className : Example36 * @description : */ public class Example36 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("输入 n"); int n = scanner.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { System.out.println("输入第 " + (i + 1) + " 个整数"); arr[i] = scanner.nextInt(); } System.out.println("输入的数组:" + Arrays.toString(arr)); System.out.println("输入 m"); int m = scanner.nextInt(); int[] newArray = new int[n]; // 定义一个新的数组,与原来的数组长度相同 for (int i = 0; i < n; i++) { newArray[i] = arr[i]; } // 计算新的位置 for (int i = 0; i < n; i++) { int tmp = (i + m) % n; arr[tmp] = newArray[i]; } System.out.println("位移后的数组:" + Arrays.toString(arr)); } }
实例 37
题目
有 N 个人围成一圈,顺序排号。从第一个人开始报数(从 1 报到 3),凡是报到 3 的人则退出圈子,问最后留下的是原来第几号的人?
分析
著名的约瑟夫环问题,用数组求解的基本思想就是用一个一维数组去标识这 n 个人的状态,默认全为 true ,也就是都在圈子内,当数到 m 的人出圈之后,标识置为 false(就是出圈了),同时报数器清 0,下一个人要从 1 开始。在每次报数之前要判断他是否在圈子内(也就是他的标识是否为 true ),如果在圈子里面才会继续报数。定义一个变量记录出圈的人数, 出圈的人数等于 n-1 时,则游戏结束。
实现
import java.util.Scanner; /** * Created with IntelliJ IDEA. * * @author : cunyu * @version : 1.0 * @email : 747731461@qq.com * @website : https://cunyu1943.github.io * @date : 2021/6/4 15:00 * @project : Java 编程实例 * @package : PACKAGE_NAME * @className : Example37 * @description : */ public class Example37 { public static void main(String[] args) { // 输入围成圈的人数 Scanner scanner = new Scanner(System.in); System.out.println("输入围成圈的人数"); int num = scanner.nextInt(); // 设置对应人的标志 boolean[] arr = new boolean[num]; for (int i = 0; i < arr.length; i++) { arr[i] = true; } // 计数 int left = num; // 报号 int counter = 0; // 对应围成圈的人在标志数组中的索引 int index = 0; while (left > 1) { // 一旦数到 3 的人,标志位置为 false,表示出局 if (arr[index] == true) { counter++; if (counter == 3) { counter = 0; arr[index] = false; left--; } } index++; if (index == num) { index = 0; } } // 最后标志数组中为 true 的人,则代表最后留下来的人 for (int i = 0; i < num; i++) { if (arr[i] == true) { System.out.println("原来排在第 " + (i + 1) + " 位的人留下了!"); } } } }
实例 38
题目
写一个函数,求一个字符串的长度,在 main
函数中输入字符串,并输出其长度。
分析
求一个字符串的长度,只需要调用 length()
方法即可,但是这里应该是不允许使用该方式,所以我们换用一种方式。
实现
import java.util.Scanner; /** * Created with IntelliJ IDEA. * * @author : cunyu * @version : 1.0 * @email : 747731461@qq.com * @website : https://cunyu1943.github.io * @date : 2021/6/4 15:16 * @project : Java 编程实例 * @package : PACKAGE_NAME * @className : Example38 * @description : */ public class Example38 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("输入一个字符串:"); String str = scanner.nextLine(); System.out.println("输入字符串的长度为:" + getLength(str)); } public static int getLength(String str) { char[] chArr = str.toCharArray(); return chArr.length; } }
实例 39
题目
编写一个函数,输入 N 为偶数时,调用函数求 1 / 2 + 1 / 4 + … + 1 / n 1/2 + 1/4+…+1/n1/2+1/4+…+1/n,当输入 N 为奇数时,调用函数求 1 / 1 + 1 / 3 + … + 1 / n 1/1 + 1/3+…+1/n1/1+1/3+…+1/n。
分析
先判断输入的数的奇偶,然后调用对应求和即可。
实现
import java.util.Scanner; /** * Created with IntelliJ IDEA. * * @author : cunyu * @version : 1.0 * @email : 747731461@qq.com * @website : https://cunyu1943.github.io * @date : 2021/6/4 16:03 * @project : Java 编程实例 * @package : PACKAGE_NAME * @className : Example39 * @description : */ public class Example39 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一个正整数:"); int num = scanner.nextInt(); System.out.println("对应数列的和:" + sum(num)); } public static double sum(int num) { double result = 0; if (num % 2 == 0) { for (int i = 2; i <= num; i += 2) { result += 1.0 / i; } } else { for (int i = 1; i <= num; i += 2) { result += 1.0 / i; } } return result; } }
实例 40
题目
字符串排序。
分析
分别输入字符串存入字符串,然后调用 Arrays.sort()
对数组进行排序即可。
实现
import java.util.Arrays; import java.util.Scanner; /** * Created with IntelliJ IDEA. * * @author : cunyu * @version : 1.0 * @email : 747731461@qq.com * @website : https://cunyu1943.github.io * @date : 2021/6/4 18:52 * @project : Java 编程实例 * @package : PACKAGE_NAME * @className : Example40 * @description : */ public class Example40 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("输入字符串个数"); int size = scanner.nextInt(); String[] arr = new String[size]; for (int i = 0; i < size; i++) { System.out.println("输入第 " + (i + 1) + " 个字符串"); arr[i] = scanner.next(); } System.out.println("输入的字符为:" + Arrays.toString(arr)); Arrays.sort(arr); System.out.println("排序后的字符串数组:" + Arrays.toString(arr)); } }