藍橋杯基礎(Java)--芯片測試&&矩陣乘法

芯片測試

有n(2≤n≤20)塊芯片,有好有壞,已知好芯片比壞芯片多
  每個芯片都能用來測試其他芯片。用好芯片測試其他芯片時,能正確給出被測試芯片是好還是壞。而用壞芯片測試其他芯片時,結果與被測試芯片實際的好壞無關  
  給出所有芯片的測試結果,問哪些芯片是好芯片。
  
輸入格式
  輸入數據第一行爲一個整數n,表示芯片個數。
  第二行到第n+1行爲n*n的一張表,每行n個數據。表中的每個數據爲0或1,在這n行中的第i行第j列(1≤i, j≤n)的數據表示用第i塊芯片測試第j塊芯片時得到的測試結果,1表示好,0表示壞,i=j時一律爲1(並不表示該芯片對本身的測試結果。芯片不能對本身進行測試)。
  
思路:假設一塊芯片是正確的,則遍歷它的測試結果,如果測試結果顯示測得的好芯片個數是大於芯片個數的1/2,則說明假設成立。我們通過遍歷一一驗證所有可能的假設。
因爲最終打印的是哪些芯片是好芯片,因此我們可以維護一個數組以保存每次假設下好芯片的索引。

import java.util.Scanner;
import java.util.ArrayList;

public class Main {

	public static void main(String[] args) {
		Scanner scn = new Scanner(System.in);
		int n = scn.nextInt();
		int[][] arr = new int[n][n];
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr.length; j++) {
				arr[i][j] = scn.nextInt();
			}
		}
		ArrayList<Integer> l=new ArrayList<Integer>();
		int count = 0;
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr.length; j++) {
				if (arr[i][j] == 1)
				{
					l.add(j+1);
				}
			}
			if(l.size()>n/2)
			{
				while(l.isEmpty()==false)
				{
					System.out.print(l.get(0)+" ");
					l.remove(0);
				}			
				break;
			}
			else {
				l.removeAll(null);	
			}
		}
	}
}

矩陣乘法

給定一個N階矩陣A,輸出A的M次冪(M是非負整數)

  • 思路:
  • 如果m=0,則打印的是對角陣
  • 如果m=1,則打印的是原來的矩陣
  • 如果m>1,每次計算的結果需要由temp存儲
import java.util.Scanner;

public class MatrixPower {

	public static void main(String[] args) {
		Scanner scn = new Scanner(System.in);
		int n = scn.nextInt();
		int m = scn.nextInt();
		int[][] arr = new int[n][n];
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr.length; j++) {
				arr[i][j] = scn.nextInt();
			}
		}

		if (m == 0) {
			for (int i = 0; i < arr.length; i++) {
				for (int j = 0; j < arr.length; j++) {
					if (i == j)
						System.out.print(1 + " ");
					else
						System.out.print(0 + " ");
				}
				System.out.println();
			}
		}
		if (m == 1) {
			for (int i = 0; i < arr.length; i++) {
				for (int j = 0; j < arr.length; j++) {
					System.out.println(arr[i][j]);
				}
			}
		}

		if (m > 1) {
			int count = 1;
			int[][] temp = arr;
			while (count < m) {
				int[][] result = new int[n][n];
				for (int i = 0; i < arr.length; i++) {
					for (int j = 0; j < arr.length; j++) {
						int sum = 0;
						for (int k = 0; k < arr.length; k++) {
							sum += temp[i][k] * arr[k][j];
						}
						result[i][j] = sum;
					}
				}
				temp = result;
				count++;
			}

			for (int i = 0; i < temp.length; i++) {
				for (int j = 0; j < temp.length; j++) {
					System.out.print(temp[i][j] + " ");
				}
				System.out.println();
			}
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章