芯片测试
有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();
}
}
}
}
版权声明:本文为qq_43720551原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。