参考:十道简单算法题,java打印杨辉三角,String和字符数组互转
public class Test {
/**
* 1-n的阶乘之和
*/
public static int Factorial(int n) {
if(n==1){
return 1;
}else{
return Factorial(n-1)*n;
}
}
/**
* 求出二维数组每列的最小值
*/
public static int[] minArray(int[][] arr) {
int[] res = new int[arr.length];
for (int i=0;i<res.length;i++){
int[] s = arr[i];
int min = s[0];
for (int j=0;j<s.length;j++){
if(s[j]<min){
min = s[j];
}
}
res[i] = min;
}
return res;
}
/**
* 求出二维数组每列的最小值
*/
public static int[] minArray1(int[][] arr) {
int[] res = new int[arr.length];
for (int i=0;i<res.length;i++){
int[] s = arr[i];
Arrays.sort(s);
res[i] = s[0];
}
return res;
}
/**
* 求"1!+4!(2的平方)+9!(3的平方)+...+n的值
*/
public static int calculate(int n) {
if(n==1){
return 1;
}else{
return (int)(calculate(n-1)+ Math.pow(n,2));
}
}
/**
* 数组对角线之和
*/
public static int arraySum(int[][] arr) {
int sum = 0;
StringBuffer sb1 = new StringBuffer();
StringBuffer sb2 = new StringBuffer();
for (int i=0;i<arr.length;i++){
sum+=arr[i][i];//左上到右下
sb1.append(arr[i][i]);
sum+=arr[i][arr.length-1-i];//右上到左下
sb2.append(arr[i][arr.length-1-i]);
if(arr.length-1-i == i){ //去掉重复点
sum -= arr[i][i];
System.out.println("去掉重复点:"+i+","+i);
}
}
System.out.println("对角线分别为:"+sb1+"和"+sb2);
return sum;
}
/**
* 打印杨辉三角
*
* 原理
* 1.每个数等于它上方两数之和
* 2.第n行的数字有n个
**/
public static void yangHui(int n) {
int[][] a = new int[n][n];
for (int i = 0; i < n; i++) {
//格式化输出
System.out.format("%" + (n - i) * 2 + "s", "");
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) {
a[i][j] = 1;
} else {
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
System.out.format("%4d", a[i][j]);
}
System.out.println();
}
}
/**
* 猴子吃桃问题
* @param x 天数
*/
public static int monkeyQue(int x) {
if (x <= 0) {
return 0;
} else if (x == 1) {
return 1;
} else {
return 2 * monkeyQue(x - 1) + 2;
}
}
/**
* 输入一段字符,计算出里面单词的个数
*
* @param str 一段文字
*/
public static int countWord(String str) {
String[] arr = str.split(" ");
return arr.length;
}
/**
* 给定两个字符串s和t,判断这两个字符串中的字母是不是完全一样(顺序可以不一样)
*/
public static void isAnagram(String s,String t) {
s = stringSort(s);
t = stringSort(t);
if(s.equals(t)){
System.out.println("相同");
}else{
System.out.println("不相同");
}
}
/**
* 把字符串转为数组排序后字符串输出
* @param str
* @return
*/
public static String stringSort(String str){
char[] arr = str.toCharArray();
Arrays.sort(arr);
str = String.copyValueOf(arr);
System.out.println("排序后:"+str);
return str;
}
/**
* 判断是否是2的某次方
*/
public static void isPowerOfTwo(int num) {
if (num <= 0) {
System.out.println("不是");
}else{
while (num % 2 == 0) {
num = num / 2;
}
if (num == 1) {
System.out.println("是");
} else {
System.out.println("不是");
}
}
}
/**
* 判断一个数字是不是ugly number(分解出来的质因数只有2、3、5这3个数字)
* @param num
*/
public static void isUgly(int num) {
if (num <= 0) {
System.out.println("不是");
} else {
while (num % 2 == 0) {
num = num / 2;
}
while (num % 3 == 0) {
num = num / 3;
}
while (num % 5 == 0) {
num = num / 5;
}
if (num == 1) {
System.out.println("是");
} else {
System.out.println("是");
}
}
}
public static void main(String[] args) {
System.out.println("3的阶乘之和:"+Factorial(3));
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
System.out.println("求出二维数组每列的最小值:"+Arrays.toString(minArray(arr)));
System.out.println("求出二维数组每列的最小值:"+Arrays.toString(minArray1(arr)));
System.out.println("求1!+4!(2的平方)+9!(3的平方)的值:"+calculate(3));
System.out.println("数组对角线之和-----");
System.out.println("数组对角线之和:"+arraySum(arr));
System.out.println("打印杨辉三角------------- ");
yangHui(10);
System.out.println("猴子吃桃问题:"+monkeyQue(10));
String str = "hello world";
System.out.println("单词的个数:"+countWord(str));
System.out.println("判断这两个字符串中的字母是不是完全一样-----");
isAnagram("acbd","abdc");
System.out.println("判断是否是2的某次方-----");
isPowerOfTwo(8);
System.out.println("判断一个数字是不是ugly number-----");
isUgly(15);
}
}