import java.util.Scanner;publicclassfactorial{publicstaticint factorial (int n){if(n ==0)return1;return n *factorial(n -1);}publicstaticvoidmain(String[] args){
Scanner scan =newScanner(System.in);int n = scan.nextInt();
System.out.println(factorial(n));}}
斐波那契数列
import java.util.Scanner;publicclassfibonacci{// public static int fibonacci(int n) {// if (n <= 1) return 1;// return fibonacci(n - 1) + fibonacci(n - 2);// }publicstaticintfibonacci(int n){if(n ==0)return0;if(n ==1|| n ==2)return1;int pre =1, cur =1;for(int i =3; i < n; i++){int temp = pre + cur;
pre = cur;
cur = temp;}return cur;}publicstaticvoidmain(String[] args){
Scanner scan =newScanner(System.in);int n = scan.nextInt();
System.out.println(fibonacci(n));}}
排列问题
publicstaticvoidperm(int[] array,int k,int m){if(k == m){for(int i =0; i <= m; i++){
System.out.println(array[i]);}
System.out.println();}else{for(int i = k; i <= m; i++){swap(array, k, i);perm(array, k +1, m);swap(array, k, i);}}}
二分搜索
publicclassbinarySearch{publicstaticintbinarySearch(int[] array,int value){int left =0, right = array.length -1;while(left <= right){int mid =(left + right)/2;if(array[mid]== value){return mid;}elseif(array[mid]< value){
left = mid +1;}else{
right = mid -1;}}return-1;}publicstaticvoidmain(String[] args){int[] array={1,2,3,4,5,6,7};int value =3;
System.out.println(binarySearch(array, value));}}
棋盘覆盖
publicclasschessBoard{staticint board[][];staticint tile =1;publicstaticvoidchessBoard(int tr,int tc,int dr,int dc,int size){if(size ==1)return;int t = tile++;int s = size /2;if(dr < tr + s && dc < tc + s){chessBoard(tr, tc, dr, dc, s);}else{
board[tr + s -1][tc + s -1]= t;chessBoard(tr, tc, tr + s -1, tc + s -1, s);}if(dr < tr + s && dc >= tc + s){chessBoard(tr, tc + s, dr, dc, s);}else{
board[tr + s -1][tc + s]= t;chessBoard(tr, tc + s, tr + s -1, tc + s, s);}if(dr >= tr + s && dc < tc + s){chessBoard(tr + s, tc, dr, dc, s);}else{
board[tr + s][tc + s -1]= t;chessBoard(tr + s, tc, tr + s, tc + s -1, s);}if(dr >= tr + s && dc >= tc + s){chessBoard(tr + s, tc + s, dr, dc, s);}else{
board[tr + s][tc + s]= t;chessBoard(tr + s, tc + s, tr + s, tc + s, s);}}publicstaticvoidmain(String[] args){int k =3;int size =(int) Math.pow(2, k);
board =newint[size][size];chessBoard(0,0,1,3, size);for(int i =0; i < size; i++){for(int j =0; j < size; j++){
System.out.printf("%4d", board[i][j]);}
System.out.println();}}}
快速排序
package algorithm;publicclassquickSort{publicstaticvoidquickSort(int[] array,int left,int right){if(left > right)return;int temp = array[left];int first = left;int last = right;while(first != last){while(temp <= array[last]&& first < last){
last--;}while(array[first]<= temp && first < last){
first++;}int data = array[first];
array[first]= array[last];
array[last]= data;}
array[left]= array[first];
array[first]= temp;quickSort(array, left, first -1);quickSort(array, first +1, right);}publicstaticvoidmain(String[] args){int[] array ={1,3,5,2,8,6,9,4,7};quickSort(array,0, array.length -1);for(int i =0; i < array.length; i++){
System.out.print(array[i]+" ");}}}
合并排序
package algorithm;publicclasssortMerge{publicstaticvoidmergesort(int[] array,int first,int last,int[] temp){if(first < last){int mid =(first + last)/2;mergesort(array, first, mid, temp);mergesort(array, mid +1, last, temp);merge(array, first, last, mid, temp);}}publicstaticvoidmerge(int[] array,int first,int last,int mid,int[]temp){int left = first, right = last, midNew = mid, midPlus = mid +1, k =0;while(left <= midNew && midPlus <= right){if(array[left]<= array[midPlus]){
temp[k++]= array[left++];}else{
temp[k++]= array[midPlus++];}}while(left <= midNew){
temp[k++]= array[left++];}while(midPlus <= right){
temp[k++]= array[midPlus++];}for(int i =0; i < k; i++){
array[first + i]= temp[i];}}publicstaticvoidmain(String[] args){int[] array ={8,5,3,1,7,2,5,9,4};int n = array.length;int[] temp =newint[n];mergesort(array,0, n-1, temp);for(int i =0; i < n; i++){
System.out.print(array[i]+" ");}}}
两个矩阵连乘
import java.util.Scanner;publicclasstowMatrixMultiplication{publicstaticvoidtowMatrixMultiplication(int[][] arr1,int[][] arr2,int[][] arr3,int row1,int col1,int row2,int col2)throws IllegalAccessException {if(col1 != row2){thrownewIllegalAccessException("矩阵不能连乘!");}for(int i =0; i < row1; i++){for(int j =0; j < col2; j++){int sum = arr1[i][0]* arr2[0][j];for(int k =1; k < col1; k++){
sum += arr1[i][k]* arr2[k][j];}
arr3[i][j]= sum;}}}publicstaticvoidmain(String[] args)throws IllegalAccessException {
Scanner scan =newScanner(System.in);int[][] arr1 =newint[2][3];int[][] arr2 =newint[3][4];int[][] arr3 =newint[2][4];for(int i =0; i <2; i++){for(int j =0; j <3; j++){
arr1[i][j]= scan.nextInt();}}for(int i =0; i <3; i++){for(int j =0; j <4; j++){
arr2[i][j]= scan.nextInt();}}towMatrixMultiplication(arr1, arr2, arr3,2,3,3,4);for(int i =0; i <2; i++){for(int j =0; j <4; j++){
System.out.printf("%3d", arr3[i][j]);}
System.out.println();}}}
多个矩阵连乘
publicclassmatrixMultiplication{publicstaticvoidmatrixMultiplication(int[] p,int[][]m,int[][]s){int n = p.length -1;for(int i =0; i < n; i++) m[i][i]=0;for(int r =2; r <= n; r++){for(int i =0; i < n - r +1; i++){int j = i + r -1;
m[i][j]= m[i +1][j]+ p[i -1]* p[i]* p[j];
s[i][j]= i;for(int k = i +1; k < j; k++){int t = m[i][k]+ m[k +1][j]+ p[i -1]* p[k]* p[j];if(t < m[i][j]){
m[i][j]= t;
s[i][j]= k;}}}}}publicstaticvoidmain(String[] args){}}
最长公共子序列
publicstaticintlcsLength(char[] x,char[] y,int[][] b){int n = x.length -1;int m = y.length -1;int[][] c =newint[n +1][m +1];for(int i =1; i <= n; i++) c[i][0]=0;for(int j =1; j <= m; j++) c[0][j]=0;for(int i =1; i <= n; i++){for(int j =1; j <= m; j++){if(x[i]== y[j]){
c[i][j]= c[i -1][j -1]+1;
b[i][j]=1;}elseif(c[i -1][j]>= c[i][j -1]){
c[i][j]= c[i -1][j];
b[i][j]=2;}else{
c[i][j]= c[i][j -1];
b[i][j]=3;}}}return c[n][m];}publicstaticvoidlcs(int i,int j,char[] x,int[][]b){if(i ==0|| j ==0)return;if(b[i][j]==1){lcs(i -1, j -1, x, b);
System.out.print(x[i]);}elseif(b[i][j]==2){lcs(i -1, j, x, b);}else{lcs(i, j -1, x, b);}}
活动安排问题
//活动安排publicclassgreedySelector{publicstaticintgreedySelector(int[] startTime,int[] finishTime,boolean[] activity){int n = startTime.length -1;
activity[1]=true;int j =1;int count =1;for(int i =2; i <= n; i++){if(startTime[i]>= finishTime[j]){
activity[i]=true;
j = i;
count++;}else{
activity[i]=false;}}return count;}publicstaticvoidmain(String[] args){int[] startTime ={1,3,0,5,3,5,6,8,2,12};int[] finishTime ={4,5,6,7,8,9,10,11,12,13,14};boolean[] activity =newboolean[startTime.length];//greedySelector gs = new greedySelector();int count =greedySelector(startTime, finishTime, activity);
System.out.println("能够进行活动的容量:"+ count);for(int i =1; i <= startTime.length -1; i++){if(activity[i]==true){
System.out.println("第"+ i +"个活动能够进行,其开始时间为:"+ startTime[i]+",结束时间为:"+ finishTime[i]);}}}}
阶乘函数import java.util.Scanner;public class factorial { public static int factorial (int n){ if (n == 0) return 1; return n * factorial(n - 1); } public static void main(String[] args) { Scanner scan = new Scanner(Sys