芯片測試
有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();
}
}
}
}