JavaSE经典编程题-2
1.打印十行杨辉三角
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
public class Test{
public static void main(String[] args) {
int[][] arr = new int[10][];
for (int i = 0;i < arr.length;i++){
arr[i] = new int[i + 1];// 求内层数组的长度
arr[i][0] = arr[i][i] = 1; // 求内层数组首末元素的值
if (i > 1){ // 求内层数组非首末元素的值
for (int j = 1;j < arr[i].length - 1;j++){
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}
}
}
// 遍历数组
for (int i = 0;i < arr.length;i++){
for (int k = 0;k < arr.length - i;k++){//控制空格
System.out.print(" ");
}
for (int j = 0;j < arr[i].length;j++){//控制输出
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
2.使用递归求1~n的和
public class Test {
public static void main(String[] args) {
int num = 5;
int sum = getSum(num);
System.out.println(sum);
}
public static int getSum(int num){
if (num == 1){
return 1;
}
return num + getSum(num - 1);
}
}
3.求第n个斐波那契数,斐波那契数列是这样一组的数列1,1,2,3,5,8,13,21,34,55,89,144…
public class Fibonacci{
public static void main(String[] args) {
System.out.println(fibonacci(3));
}
public static long fibonacci(int n) {
long result = 1;
if (n > 2) {
result = fibonacci(n - 1) + fibonacci(n - 2);
}
return result;
}
}
4.数组的求和、平均值,最大最小值及下标,查找,排序
public class ArrayDemo2 {
public static void main(String[] args) {
int[] nums = {3,1,7,0,9,3,5,};
// 数组的求和、平均值
int sum = 0;
for (int i = 0; i < nums.length; i++) {
sum += i;
}
System.out.println(sum);
System.out.println(sum / nums.length);
// 最大最小值及下标
int max = nums[0];//假设第0个元素是数组里的最大值
int min = nums[0];//假设最大数的下标是0
int maxIndex = 0;
int minIndex = 0;
for (int i = 1; i < nums.length; i++) {
if (nums[i] > max){
max = nums[i];
maxIndex = i;
}
if (nums[i] < min){
min = nums[i];
minIndex = i;
}
}
System.out.println("最大值为:" + max + ",是数组中第" + maxIndex + "个元素");
System.out.println("最大值为:" + min + ",是数组中第" + minIndex + "个元素");
int x = 5;
int index = -1;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == x){
index = i;
break;
}
}
if (index == -1){
System.out.println("不存在");
}else {
System.out.println(index);
}
}
}
5.二分查找,前提是数组有序
public class BinarySearch {
public static void main(String[] args) {
int[] nums = {5,8,9,10,12,20,31,45,78,80};
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个数字:");
int x = scanner.nextInt();
int low = 0;//最左边
int high = nums.length - 1;//最右边
int index = -1;//要查找的元素的索引
while (low <= high){
int middle = (low + high) >>> 1;
if (nums[middle] == x){
index = middle;
break;
}
if (nums[middle] < x){
low = middle + 1;
}else {
high = middle - 1;
}
}
if (index == -1){
System.out.println("未找到元素");
}else {
System.out.println("下标是:" + index);
}
scanner.close();
}
}
6.数组里删除元素
public class DeleteElement {
public static void main(String[] args) {
int[] nums = {4,8,2,1,7,6,5,3};
Scanner scanner = new Scanner(System.in);
System.out.print("请输入要删除的元素下标:");
int index = scanner.nextInt();
if (index < 0 || index > nums.length - 1){
System.out.print("请输入0~" + (nums.length - 1) + "的整数");
}else {
int[] newArr = new int[nums.length - 1];
for (int i = 0; i < newArr.length; i++) {
if (i < index){
newArr[i] = nums[i];
}else {
newArr[i] = nums[i + 1];
}
}
System.out.println(Arrays.toString(newArr));
}
scanner.close();
}
}