20190819-社招记录

两个题都比较简单

1.打印对角线

输入 n = 3,矩阵是这样的:

1 2 3
4 5 6
7 8 9

打印结果:

1

2 4

3 5 7

6 8

9

3

2 6

1 5 9

4 8

7
public class DidiMatrix {

	public void getResult(int n) {
		if (n <= 0) {
			return;
		}

		int[][] matrix = getMatrix(n);

		// 1
		for (int i = 0; i < n; ++i) {
			int row = 0;
			for (int j = i; j >= 0; --j) {
				System.out.print(matrix[row++][j] + " ");
			}
			System.out.println();
		}

		// 2
		for (int j = n - 1; j > 0; --j) {
			int col = n - 1;
			for (int i = n - j; i < n; ++i) {
				System.out.print(matrix[i][col--] + " ");
			}
			System.out.println();
		}

		// 3
		for (int i = 0; i < n; ++i) {
			int row = 0;
			for (int j = n - i - 1; j < n; ++j) {
				System.out.print(matrix[row++][j] + " ");
			}
			System.out.println();
		}

		// 4
		for (int j = 0; j < n - 1; ++j) {
			int col = 0;
			for (int i = j + 1; i < n; ++i) {
				System.out.print(matrix[i][col++] + " ");
			}
			System.out.println();
		}
	}

	public int[][] getMatrix(int n) {
		int[][] matrix = new int[n][n];
		int num = 1;
		for (int i = 0; i < n; ++i) {
			for (int j = 0; j < n; ++j) {
				matrix[i][j] = num++;
			}
		}
		return matrix;
	}

	public static void main(String[] args) {

		DidiMatrix obj = new DidiMatrix();
		obj.getResult(3);

	}
}

运行结果如下:

 

2.多线程交替打印ABC

三个线程,按次序打印ABC,无限循环打印。。。

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


public class DidiOrderedPrinter {

	private volatile int lock = 1;

	public void print(int i) throws Exception {
		while (true) {
			while (lock != i) ;
			System.out.print((char) (64 + i));
			if (i % 3 == 0) {
				System.out.println();
			}
			lock = (i % 3 == 0 ? 1 : i % 3 + 1);
		}
	}

	public static void main(String[] args) {

		ExecutorService service = Executors.newFixedThreadPool(3);
		DidiOrderedPrinter printer = new DidiOrderedPrinter();
		Task A = new Task(printer, TaskType.A);
		Task B = new Task(printer, TaskType.B);
		Task C = new Task(printer, TaskType.C);

		service.submit(C);
		service.submit(A);
		service.submit(B);
	}

	private static class Task implements Runnable {

		private DidiOrderedPrinter printer;
		private TaskType type;

		public Task(DidiOrderedPrinter ordered, TaskType type) {
			this.printer = ordered;
			this.type = type;
		}

		@Override
		public void run() {
			try {
				printer.print(type.val);
			} catch (Exception e) {

			}
		}
	}

	private enum TaskType {
		A(1), B(2), C(3);

		private int val;

		TaskType(int val) {
			this.val = val;
		}

		public int getVal() {
			return val;
		}
	}

}

运行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值