蓝桥杯题目10矩阵翻硬币

    xiaoxiao2021-03-26  13

    package s3; import java.util.Scanner; public class test10 { /* 标题:矩阵翻硬币     小明先把硬币摆成了一个 n 行 m 列的矩阵。     随后,小明对每一个硬币分别进行一次 Q 操作。     对第x行第y列的硬币进行 Q 操作的定义:将所有第 i*x 行,第 j*y 列的硬币进行翻转。     其中i和j为任意使操作可行的正整数,行号和列号都是从1开始。     当小明对所有硬币都进行了一次 Q 操作后,他发现了一个奇迹——所有硬币均为正面朝上。     小明想知道最开始有多少枚硬币是反面朝上的。于是,他向他的好朋友小M寻求帮助。     聪明的小M告诉小明,只需要对所有硬币再进行一次Q操作,即可恢复到最开始的状态。然而小明很懒,     不愿意照做。于是小明希望你给出他更好的方法。帮他计算出答案。 【数据格式】     输入数据包含一行,两个正整数 n m,含义见题目描述。     输出一个正整数,表示最开始有多少枚硬币是反面朝上的。 【样例输入】 2 3 【样例输出】 1 */             public static void main(String[] args) {         // TODO Auto-generated method stub         Scanner scan=new Scanner(System.in);         int n=scan.nextInt();         int m=scan.nextInt();         int [][]s=new int [n][m];         for(int i=0;i<n;i++){             for(int j=0;j<m;j++){                 s[i][j]=1;             }         }         for(int i=1;i<=n;i++){//取得行值             for(int j=1;j<=m;j++){//取得列值                                 for(int x=0;x<n;x++){                     for(int y=0;y<m;y++){                         if((x+1)%i==0&&(y+1)%j==0){                                                         if(s[x][y]==1){                                 s[x][y]=0;                             }else{                                 s[x][y]=1;                             }                                                     }                                              }                 }                             }         }         int sum=0;         for(int x=0;x<n;x++){             for(int y=0;y<m;y++){                 if(s[x][y]==0){                     sum++;                 }             }         }             System.out.println(sum);     } }
    转载请注明原文地址: https://ju.6miu.com/read-450145.html

    最新回复(0)