码迷,mamicode.com
首页 > 编程语言 > 详细

算法题练习

时间:2016-06-06 22:03:40      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:

1.菱形

public static void main(String[] args) {
        for(int i=1;i<5;i++){
            for(int j=1;j<5-i;j++){
                System.out.print(" ");
            }
            for(int k=1;k<2*i;k++){
                System.out.print("*");
            }
            System.out.print("\n");
        }
        for(int p=1;p<4;p++){
            for(int q=1;q<p+1;q++){
                System.out.print(" ");
            }
            for(int m=1;m<2*(4-p);m++){
                System.out.print("*");
            }
            System.out.print("\n");
        }

    }
    

2.求鞍点:算法一:

/*找出一个二维数组的鞍点。
鞍点指某数组元素的值在该行上最大、在列上最小。也可能没有鞍点*/
public class andian {
	public static void main(String[] args) {
		int a[][]={{13,9,16},{5,4,3},{6,1,11}};
		isAndian(a);		
	}
	static void isAndian(int a[][]){
		int row=a.length;//row
		int col=a[0].length;
		for(int i=0;i<row;i++){
			int k=findMax(a,i);//行上最大返回列
			int q=findMin(a,k);//列上最小返回行
			if(q==i) {
				System.out.println("鞍点的行下标:"+q+"\n"+"鞍点的列下标:"+k);
				System.out.println("鞍点的值:"+a[q][k]);
			}			
		}			
	}
	
	static int findMax(int a[][],int m){
		int max=a[m][0];
		int maxCIndex = 0;
		for(int i=0;i<a[m].length;i++){
			if(a[m][i]>max) {
				max=a[m][i];
				maxCIndex=i;
			}
		}
		return maxCIndex;
	}
	
	static int findMin(int a[][],int n){
		int min=a[0][n];
		int minRIndex = 0;
		for(int j=0;j<a.length;j++){
			if(a[j][n]<min) {
				min=a[j][n];
				minRIndex=j;
			}
		}
		return minRIndex;
	}

}

  算法二:

/*找出一个二维数组的鞍点。
鞍点指某数组元素的值在该行上最大、在列上最小。也可能没有鞍点*/
public class andain2 {
	public static void main(String[] args) {
		int a[][]={{13,9,16},{5,4,3},{6,1,11}};
		isAndian(a);		
	}
	static void isAndian(int a[][]){
		int row=a.length;//row
		for(int i=0;i<row;i++){
			int k=findMax(a,i);
			if(isMin(a,i,k)){
				System.out.println("鞍点的行下标:"+i+"\n"+"鞍点的列下标:"+k);
				System.out.println("鞍点的值:"+a[i][k]);
			}
		}		
	}
	
	static int findMax(int a[][],int m){
		int max=a[m][0];
		int maxCIndex = 0;
		for(int i=1;i<a[m].length;i++){
			if(a[m][i]>max) {
				max=a[m][i];
				maxCIndex=i;
			}
		}
		return maxCIndex;//m,k(index)
	}
	
	static boolean isMin(int a[][],int m,int n){
		int min=a[m][n];
		int q=m;
		for(int j=0;j<a.length;j++){
			if(j==m) continue;
			if(a[j][n]<min) {
				min=a[j][n];
				q=j;  
			}
		}
		if(q==m) 
			return true;
		else 
			return false;
	}

}

3. 一行数字(6个数)向左平移,打印出依次平移的六行

public class movementL {

	public static void main(String[] args) {
		int a[]={7,4,8,9,1,5};
		sort(a);
		
	}
	static void sort(int a[]){
		for(int i=1;i<a.length+1;i++){
			for(int j=i-1;j<a.length;j++){
				System.out.print(a[j]+" ");
			}
			for(int k=0;k<i-1;k++){
				System.out.print(a[k]+" ");
			}
			System.out.print("\n");
		}		
	}
}

  一行数字(6个数)向右平移,打印出依次平移的六行

public class movementR {
	public static void main(String[] args) {
		int a[]={7,4,8,9,1,5};
		sort(a);		
	}
	static void sort(int a[]){
		for(int i=1;i<a.length+1;i++){
			for(int k=a.length+1-i;k<a.length;k++){
				System.out.print(a[k]+" ");
			}
			for(int j=0;j<a.length-i+1;j++){
				System.out.print(a[j]+" ");
			}
			System.out.print("\n");
		}		
	}
}

  4.转圈

import java.io.ObjectInputStream.GetField;
import java.util.*;

public class zhuanQuan {
		public static void main(String[] args) {
			int num1 = zhuanQuan .getNum1();
			int num2 = zhuanQuan .getNum2();
			sa(num1, num2);
		}
		public static int getNum1() {
			int num1 = 0;
			Scanner reader = new Scanner(System.in);
			try {
				System.out.println("请输入行:");
				num1 = reader.nextInt();
			} catch (InputMismatchException e) {
				System.out.println("对不起,您输入的不是数字,请重新输入:");
				num1 = getNum1();
			}
			return num1;
		}

		public static int getNum2() {
			int num2 = 0;
			Scanner reader = new Scanner(System.in);
			try {
				System.out.println("请输入列:");
				num2 = reader.nextInt();
			} catch (Exception e) {
				System.out.println("对不起,您输入的不是数字,请重新输入:");
				num2 = getNum2();
			}
			return num2;
		}

		static void sa(int m, int n) {
			int b[][] = new int[m][n];
			int i = 0;
			int j = n - 1;
			int p = 0;
			int k = m - 1;
			int num = 1;
			while (num <= m * n) {
				for (int col = p; col <= j; col++) {
					b[p][col] = num++;
				}
				i++;// 1
				if (num > m * n)
					break;
				for (int row = i; row <= k; row++) {
					b[row][j] = num++;
				}
				j--;// 3
				if (num > m * n)
					break;
				for (int col = j; col >= p; col--) {
					b[k][col] = num++;
				}
				k--;// 3
				if (num > m * n)
					break;
				for (int row = k; row >= i; row--) {
					b[row][p] = num++;
				}
				p++;// 1
			}
			for (int q = 0; q < m; q++) {
				for (int x = 0; x < n; x++)
					if (b[q][x] < 10)
						System.out.print("0" + b[q][x] + "    ");
					else
						System.out.print(b[q][x] + "    ");
				System.out.println(‘\n‘);
			}
		}
	}

  

 

 

算法题练习

标签:

原文地址:http://www.cnblogs.com/123lele/p/5565114.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!