蓝桥杯基础(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();
			}
		}
	}
}

版权声明:本文为qq_43720551原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。