您的位置:首页 > 其它

蓝桥杯题目10矩阵翻硬币

2017-01-05 00:32 302 查看
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
[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);

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: