Java经典算法50题(31~40题)

第三十一题:将一个数组逆序输出。
分析:这里我是默认数组是int类型的,
需要注意的点:无
第一种

package test2;

import java.util.Scanner;

public class test31 {
    
    

	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		int x;
		Scanner sc = new Scanner(System.in);
		x = sc.nextInt();
		int[] m = new int[x];
		for (int i = 0; i < m.length; i++) {
    
    
			m[i] = sc.nextInt();
		}
		for (int i = 0; i < m.length; i++) {
    
    
			System.out.print(m[(m.length - 1 - i)] + " ");
		}
	}

}

第二种:(这里用到栈的知识,小伙伴可以不看,只是今天刚好学到这里,就想用用)

package test2;

import java.util.Scanner;
import java.util.Stack;

public class test31too {
    
    

	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String s = sc.nextLine();
		Object[] m = s.split(" ");
		Stack stack = new Stack();
		for (int i = 0; i < m.length; i++) {
    
    
			stack.push(m[i]);
		}
		while (!stack.isEmpty()) {
    
    
			System.out.print(stack.pop() + " ");
		}
	}

}

第三十二题:取一个整数a从右端开始的4~7位。
分析:用字符数组解决,简单直接
需要注意的点:最好判断一下输入的数字是否符合要求

package test2;

import java.util.Scanner;

public class test32 {
    
    

	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String s = sc.nextLine();
		char[] ch = s.toCharArray();
		if (ch.length < 7) {
    
    
			System.out.println("输入的数字不符合标准");
			System.exit(-1);
		}

		for (int i = 0; i < ch.length; i++) {
    
    
			if (i >= ch.length - 7 && i <= ch.length - 4) {
    
    
				System.out.print(ch[i]);
			}
		}
	}

}

第三十三题:打印出杨辉三角形(要求打印出10行如下图)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
…………
分析:除了第一行和每行第一个元素之外,其余的每行的第x个元素都等于上一行的的第x-1个元素和第x个元素之和
需要注意的点:需要注意最后两个for循环是如何输出的,输出了几个

package test2;

public class test33 {
    
    
	public static void main(String[] args) {
    
    
		int[][] a = new int[10][10];
		for (int i = 0; i < 10; i++) {
    
    
			a[i][i] = 1;
			a[i][0] = 1;
		}
		for (int i = 2; i < 10; i++) {
    
    
			for (int j = 1; j < i; j++) {
    
    
				a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
			}
		}
		for (int i = 0; i < 10; i++) {
    
    
			for (int k = 0; k < 2 * (a.length - i) - 1; k++) {
    
    
				System.out.print(" ");
			}
			for (int j = 0; j <= i; j++) {
    
    
				System.out.print(a[i][j] + "   ");
			}
			System.out.println();
		}
	}
}

第三十四题:输入3个数a,b,c,按大小顺序输出。
分析:比较三次即可
需要注意的点:无

package test2;

import java.util.Scanner;

public class test34 {
    
    
	public static void main(String[] args) {
    
    
		Scanner input = new Scanner(System.in);
		int a = input.nextInt();
		int b = input.nextInt();
		int c = input.nextInt();
		if (a > b) {
    
    
			int t = a;
			a = b;
			b = t;
		}
		if (b > c) {
    
    
			int t = b;
			b = c;
			c = t;
		}
		if (a > b) {
    
    
			int t = a;
			a = b;
			b = t;
		}
		System.out.println(a + " " + b + " " + c);
	}
}

第三十五题:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
分析:这里我默认输入的数组为int型的
需要注意的点:如果恰好最大的是最后一个并且最小的是第一个,那么交换两次会抵消,需要再交换一次

package test2;

import java.util.Scanner;

public class test35 {
    
    

	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int[] m = new int[5];
		for (int i = 0; i < m.length; i++) {
    
    
			m[i] = sc.nextInt();
		}
		int max = 0, min = 0;
		for (int i = 1; i < m.length; i++) {
    
    
			if (m[i] > m[max])
				max = i;
			else if (m[i] < m[min])
				min = i;
		}
		int t = m[0];
		m[0] = m[max];
		m[max] = t;
		t = m[m.length - 1];
		m[m.length - 1] = m[min];
		m[min] = t;
		if (max == m.length - 1 && min == 0) {
    
    
			t = m[min];
			m[min] = m[max];
			m[max] = t;
		}
		for (int i = 0; i < m.length; i++) {
    
    
			System.out.print(m[i] + " ");
		}
	}

}

第三十六题:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
分析:可以借助空数组
需要注意的点:代码只是提供一种思想,不一定要全盘照抄

package test2;

import java.util.Scanner;

public class test36 {
    
    

	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入数组的大小");
		int x = sc.nextInt();
		System.out.println("请输入调换的位数");
		int y = sc.nextInt();
		int[] m = new int[x];
		System.out.println("请输入数组");
		for (int i = 0; i < m.length; i++) {
    
    
			m[i] = sc.nextInt();
		}
		int[] n = new int[m.length];
		int j, i = 0;
		for (j = 0; j < y; j++) {
    
    
			n[j] = m[x - y + j];
		}
		for (; j < n.length; j++) {
    
    
			n[j] = m[i];
			i++;
		}
		for (i = 0; i < n.length; i++) {
    
    
			System.out.println(n[i]);
		}
	}

}

第三十七题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
分析:定义一个布尔类型的数组然后用while循环选择出符合要求的数
需要注意的点:需要注意若是人数变量循环到末尾需使人数变量归零。

package wangjt;

import java.util.Scanner;

public class test37 {
    
    
	public static void main(String[] args) {
    
    
		Scanner input = new Scanner(System.in);
		int n = input.nextInt();
		boolean[] arr = new boolean[n];
		for (int i = 0; i < arr.length; i++) {
    
    
			arr[i] = true;
		}
		int Count = n;
		int index = 0;
		int countNum = 0;
		while (Count > 1) {
    
    
			if (arr[index] == true) {
    
    
				countNum++;
				if (countNum == 3) {
    
    
					arr[index] = false;
					Count--;
					countNum = 0;
				}
			}
			index++;
			if (index == n) {
    
    
				index = 0;
			}
		}
		for (int i = 0; i < n; i++) {
    
    
			if (arr[i] == true) {
    
    
				System.out.println(i + 1);
			}
		}
	}
}

第三十八题:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
分析:直接调用length方法即可,也可以用toCharArray()方法
需要注意的点:

import java.util.Scanner;
public class test38 {
    
    
    public static void main(String[] args) {
    
    
        Scanner input =new Scanner(System.in);
        String s=input.nextLine();
        System.out.println(s.length());
    }
}

第三十九题:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n(利用指针函数)
分析:编写一个方法,根据输入数据的奇偶性执行不同的操作
需要注意的点:求和时需要用double类型

package wangjt;
import java.util.Scanner;
public class test39 {
    
    
    public static void main(String[] args) {
    
    
        Scanner sc =new Scanner(System.in);
        int n=sc.nextInt();
        System.out.println(sum(n));
    }
    public static double sum(int n) {
    
    
        double m=0;
        if(n%2==0) {
    
    
            for(int i=2;i<=n;i+=2) {
    
    
                m+=(double)1/i;
            }
        }else {
    
    
            for(int i=1;i<=n;i+=2) {
    
    
                m+=(double)1/i;
            }
        }
        return m;
    }
}

第四十题:字符串排序。
分析:和我们常做的int类型排序差不多,只是把int换成了String而已,只需用一个字符串比较的方法,再用冒泡法等方法排序 ,这里我直接把网上的代码改了改,我看的那个代码是写一个字符串比较的方法。
需要注意的点:无

package wangjt;

import java.util.Scanner;

public class test40 {
    
    
	public static void main(String[] args) {
    
    
		Scanner input = new Scanner(System.in);
		String[] toStrings = new String[5];
		String temp = null;
		toStrings[0] = "afdfdcv";
		toStrings[1] = "ghaf";
		toStrings[2] = "fdasfas";
		toStrings[3] = "tyrdfas";
		toStrings[4] = "fadsfsd";
		for (int i = 0; i < 5; i++) {
    
    
			for (int j = i + 1; j < 5; j++) {
    
    
				if (toStrings[i].compareTo(toStrings[j]) > 0) {
    
    
					temp = toStrings[i];
					toStrings[i] = toStrings[j];
					toStrings[j] = temp;
				}
			}
		}
		for (int i = 0; i < 5; i++) {
    
    
			System.out.println(toStrings[i]);
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_47627886/article/details/108739414
今日推荐