目录:
java编程题【31-40】
程序31:逆序输出数组
题目概述:
接收一个数组并得到一个与之对应的逆序数组
代码:
package com.company;
import java.util.Scanner;
/**
* @Author: cc雪影
* @Description:逆序输出数组
* @Date: Create in 20:22 2021/7/5
*/
public class demo1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int i = 0;
int arr[] = new int[20];
int num = scanner.nextInt();//步骤1:num用来存储输入的数字
do {
arr[i] = num;//步骤2:将输入的数字传入数组
i++;
num = scanner.nextInt();//步骤3:继续接受一个数字
} while (num != -1);//do-while循环中需要注意步骤1、2、3的顺序,当然你可以尝试使用while循环完成题目
scanner.close();
for (int j = i - 1; j >= 0; j--) {//遍历输出数组
System.out.print(arr[j] + " ");
}
}
}
效果展示:
3 4 5 2 1 6 -1
6 1 2 5 4 3
如果题目只要求逆序输出数组,那就直接自右向左遍历数组即可。
程序32:对整数小操作
题目概述:
取一个整数a从右部开始的4-7位
代码:
public class demo2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Integer a = scanner.nextInt();//步骤1:接受一个整型数字
String string = a.toString();//步骤2:利用整型数字的toString()方法将数字转换成字符串,好处见步骤3
scanner.close();
for (int i = string.length() - 4; i >= string.length() - 7; i--) {
System.out.print(string.charAt(i) + " ");//步骤3:字符串类似数组,可以根据下标取字符
}
}
}
效果展示:
567198093
8 9 1 7
程序33:打印杨辉三角形
题目概述:
打印杨辉三角形的前十行
代码:
public class demo3 {
public static void main(String[] args) {
int[][] arr = new int[10][10];
for (int i = 0; i < 10; i++) {//首先完成杨辉三角的外层的赋值
arr[i][0] = 1;
arr[i][i] = 1;
}
for (int i = 2; i < 10; i++) {//遍历杨辉三角的行
for (int j = 1; j < i; j++) {//针对第i行进行赋值
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];//
}
}
// 遍历输出杨辉三角形
for (int i = 0; i < arr.length; i++) {//遍历杨辉三角的行
for (int j = i; j < arr.length - 1; j++) {//打印空格,与其深度成反比
System.out.print(" ");
}
for (int j = 0; j < i + 1; j++) {//针对第i行进行遍历打印
System.out.print(arr[i][j] + " ");
}
System.out.println();//打印完成一行就换行
}
}
}
效果展示:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
程序34:三个数字比大小
题目概述:
比大小:接受三个数,并按照从大到小的顺序进行进行排序
代码:
public class demo4 {
public static void main(String[] args) {
int[] arr = new int[3];
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < arr.length; i++) {
arr[i] = scanner.nextInt();
}
scanner.close();
//因为只有三个数,这里只需要三次判断就可以排序(如果数字太多考虑排序算法,如冒泡排序等)
int tem;
if (arr[0] < arr[1]) {
tem = arr[0];
arr[0] = arr[1];
arr[1] = tem;
}
if (arr[2] > arr[1]) {
tem = arr[2];
arr[2] = arr[1];
arr[1] = tem;
}
if (arr[0] < arr[1]) {
tem = arr[0];
arr[0] = arr[1];
arr[1] = tem;
}
for (int a : arr) {
System.out.print(a + " ");
}
}
}
效果展示:
3 5 1
5 3 1
程序35:数组元素对换
题目概述:
输入数组,最大的与第一个交换,最小的与最后一个交换
代码:
public class demo5 {
private static java.util.Comparator<? super Integer> Comparator;
public static void main(String[] args) {
ArrayList<Integer> arrlist = new ArrayList<Integer>();
ArrayList<Integer> tempArrlist = new ArrayList<Integer>();//临时的tempArrlist用来做排序操作,空间换时间
Scanner scanner = new Scanner(System.in);
System.out.println("请输入多个数字,并以 -1 作为结束");
int num = scanner.nextInt();
while (num != -1) {
arrlist.add(num);
tempArrlist.add(num);
num = scanner.nextInt();
}
tempArrlist.sort(Comparator);
int min = arrlist.indexOf(tempArrlist.get(0));//最小数的原下标
int max = arrlist.indexOf(tempArrlist.get(arrlist.size() - 1));//最大数的原下标
int temp;
//最小数的对换
temp = arrlist.get(arrlist.size() - 1);
arrlist.set(arrlist.size() - 1, tempArrlist.get(0));
arrlist.set(min, temp);
//最大数的对换
temp = arrlist.get(0);
arrlist.set(0, tempArrlist.get(arrlist.size() - 1));
arrlist.set(max, temp);
//遍历输出数组
System.out.println("交换后的结果是:");
for (int a : arrlist) {
System.out.print(a + " ");
}
}
}
效果展示:
请输入多个数字,并以 -1 作为结束
2 4 5 1 78 56 43
-1
交换后的结果是:
78 4 5 43 2 56 1
程序36:数组冒泡
题目概述:
有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数
代码:
public class demo6 {
public static void main(String[] args) {
fun();
}
public static void fun() {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入数字的个数n: ");
int n = scanner.nextInt();
int[] arr1 = new int[n];
int[] arr2 = new int[n];
System.out.print("请输入前后对换的数字长度m:");
int m = scanner.nextInt();
if (n / 2 >= m) {//判断一下能否做对换
for (int i = 0; i < arr1.length; i++) {
arr1[i] = scanner.nextInt();
arr2[i] = arr1[i];
}
for (int i = 0; i < m; i++) {
arr2[i] = arr1[arr1.length - m + i];
arr2[arr2.length - m + i] = arr1[i];
}
for (int a : arr2) {
System.out.print(a + " ");
}
System.out.println("请继续输入下一组,或者选择停止该项目。");
fun();
} else {
System.out.println("想要对换的长度太长,无法进行对换!");
fun();
}
}
}
效果展示:
请输入数字的个数n: 5
请输入前后对换的数字长度m:3
想要对换的长度太长,无法进行对换!
请输入数字的个数n: 5
请输入前后对换的数字长度m:2
3 6 9 4 1
4 1 9 3 6 请继续输入下一组,或者选择停止该项目。
请输入数字的个数n: 8
请输入前后对换的数字长度m:4
1 2 3 4 5 6 7 8
5 6 7 8 1 2 3 4 请继续输入下一组,或者选择停止该项目。
请输入数字的个数n:
程序37:逢3过
题目概述:
有 n 个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),但凡报到3的人退出圈子,问最后留下的是原来的第几号
代码:
public class demo7 {
public static void main(String[] args) {
fun();
}
public static void fun() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入排成一圈的人数:");
int n = scanner.nextInt();
boolean[] arr = new boolean[n];//定义一个布尔类型的数组用来做判断
for (int i = 0; i < arr.length; i++) {
arr[i] = true;//true代表还在队列里,false代表已经出列
}
int leftCount = n;//leftCount代表当前队列里的人数
int countNum = 0;//引入计数对象
int index = 0;//自左向右扫描
while (leftCount > 2) {
if (arr[index] == true) {
countNum++;
if (countNum == 3) {
countNum = 0;//countNum到三清零,重新计数
arr[index] = false;
leftCount--;//是三的倍数,出列后,总数减少1人
}
}
index++;
if (index == n) {//实现操作可以需要多遍,重现自左向右扫描
index = 0;
}
}
for (int i = 0; i < n; i++) {
if (arr[i] == true) {
System.out.println("原排列在第 " + (i + 1) + " 位的人留下来了。");
}
}
System.out.println("请开始下一次测试或选择结束程序");
fun();
}
}
效果展示:
请输入排成一圈的人数:
6
原排列在第 1 位的人留下来了。
原排列在第 5 位的人留下来了。
请开始下一次测试或选择结束程序
请输入排成一圈的人数:
8
原排列在第 4 位的人留下来了。
原排列在第 7 位的人留下来了。
请开始下一次测试或选择结束程序
请输入排成一圈的人数:
56
原排列在第 7 位的人留下来了。
原排列在第 29 位的人留下来了。
请开始下一次测试或选择结束程序
请输入排成一圈的人数:
程序38:求出字符串长度
题目概述:
求出字符串长度
代码:
public class demo8 {
public static void main(String[] args) {
fun();
}
public static void fun() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入想要检测的字符串:");
String string = scanner.nextLine();
System.out.println("通过字符串自带的length()方法:"+string.length());
char[] arr = string.toCharArray();
System.out.println("通过使用数组获取字符串长度:"+arr.length);
fun();
}
}
效果展示:
请输入想要检测的字符串:
sdhjsg
通过字符串自带的length()方法:6
通过使用数组获取字符串长度:6
请输入想要检测的字符串:
sfsgshfghfgdfy
通过字符串自带的length()方法:14
通过使用数组获取字符串长度:14
请输入想要检测的字符串:
程序39:奇、偶倒数和
题目概述:
输入偶数,求各偶数的倒数和;奇数同理
代码:
public class demo9 {
static int number = 0;
public static void main(String[] args) {
judge();
if (number % 2 == 0) {
fun1(number);
} else {
fun2(number);
}
}
public static void judge() {//
/**
* @description:判断函数,当用户输入不规范数据时,可以让用户重现输入数据
* @createDate: 2021/7/6
* @return: void
*/
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
int tem = scanner.nextInt();
if (tem <= 0) {
System.out.println("输入的数字应该大于0,请重新输入:");
judge();//数据不规范,重新接受数据进行判断
} else {//数据符合要求,将整数赋值给静态变量number
number = tem;
}
}
public static void fun1(int num) {
/**
* @description:当输入为偶数时,进行此计算方法
* @param num
* @createDate: 2021/7/6
* @return: void
*/
double sum = 0;
for (int i = 2; i <= num; i = i + 2) {
sum = sum + 1.0 / i;
}
System.out.println("计算结果为:" + sum);
}
public static void fun2(int num) {
/**
* @description:当输入为奇数时,进行此计算方法
* @param num
* @createDate: 2021/7/6 17:04
* @return: void
*/
double sum = 0;
for (int i = 1; i <= num; i = i + 2) {
sum = sum + 1.0 / i;
}
System.out.println("计算结果:" + sum);
}
}
效果展示:
请输入一个整数:
0
输入的数字应该大于0,请重新输入:
请输入一个整数:
-3
输入的数字应该大于0,请重新输入:
请输入一个整数:
8
计算结果为:1.0416666666666665
Process finished with exit code 0
程序40:字符串排序
题目概述:
输入一个字符串,按照其大小顺序进行排序
代码:
public class demo10 {
private static java.util.Comparator<? super Character> Comparator;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
char[] arr = string.toCharArray();//将字符串转成字符数组
ArrayList<Character> arrayList = new ArrayList<>();
for (char c : arr) {//转换到ArrayList进行处理
arrayList.add(c);
}
arrayList.sort(Comparator);//利用ArrayList的排序操作,简单实现顺序的问题
for (char c : arrayList) {//遍历输出
System.out.print(c + " ");
}
}
}
效果展示:
jhdfsbfh
b d f f h h j s