| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1012 人关注过本帖
标题:蓝桥杯历届真题 矩阵翻牌
只看楼主 加入收藏
qwe142
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-4-6
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
蓝桥杯历届真题 矩阵翻牌
蓝桥杯历届真题   矩阵翻牌   求各位大神看一下有什么问题?

#include<stdio.h>
int main()
{  long long int  m,n,i,j,k,p,q,l,s=0,x,y;
   scanf("%I64d%I64d",&n,&m);
   long long int a[n][m];
   for(i=1;i<=n;i++)
   { for(j=1;j<=m;j++)
     a[i][j]=1;
   }   
   for(x=1;x<=n;x++)
   {
       for(y=1;y<=m;y++)
     {   
          for(i=1;i<=n/x;i++)
            { for(q=1;q<=m;q++)
                if(a[x*i][q]==1)    a[x*i][q]=0;
                else a[x*i][q]=1;
            }
           for(j=1;j<=m/y;j++)  
            {
                for(l=1;l<=n;l++)
                if(a[l][y*j]==1)    a[l][y*j]=0;
                else a[l][y*j]=1;
            }   
      }
   }
   for(i=1;i<=n;i++)
   {  for(j=1;j<=m;j++)
      if(a[i][j]==0)  s++;
   }
    printf("%I64d",s);
   return 0;
}
搜索更多相关主题的帖子: include 
2017-04-06 18:04
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
还是顶一下~顺便说明最好把题目贴一下~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-07 02:23
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
问题可能潜在很多~例如数组开支会不会超限~

把代码整理了一下~当然还没有改正问题~先这样看看~

程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

char a[1000][1000]={0};
int main()
{  
    int m=0;
    int n=0;
    int i=0;
    int j=0;
    int q=0;
    int l=0;
    int s=0;
    int x=0;
    int y=0;

    scanf("%d%d",&n,&m);   //n行-m-列
       
    memset(a,1,sizeof(a));

    for(x=1;x<=n;x++)
        for(y=1;y<=m;y++)   
        {
            for(i=1;i<=n/x;i++)
               for(q=1;q<=m;q++)
                   a[x*i][q]=!a[x*i][q];

                for(j=1;j<=m/y;j++)  
                     for(l=1;l<=n;l++)
                         a[l][y*j]=!a[l][y*j];
           } 

   for(i=1;i<=n;i++)
     for(j=1;j<=m;j++)
      if(a[i][j]==0)  
          s++; 
   
   printf("%d\n",s);

   return 0;
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-07 02:47
qwe142
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-4-6
收藏
得分:0 
题目
题目:

     小明先把硬币摆成了一个 n 行 m 列的矩阵。


  随后,小明对每一个硬币分别进行一次 Q 操作。

  对第x行第y列的硬币进行 Q 操作的定义:将所有第 i*x 行,第 j*y 列的硬币进行翻转。

  其中i和j为任意使操作可行的正整数,行号和列号都是从1开始。

  当小明对所有硬币都进行了一次 Q 操作后,他发现了一个奇迹——所有硬币均为正面朝上。

  小明想知道最开始有多少枚硬币是反面朝上的。于是,他向他的好朋友小M寻求帮助。

  聪明的小M告诉小明,只需要对所有硬币再进行一次Q操作,即可恢复到最开始的状态。然而小明很懒,不愿意照做。于是小明希望你给出他更好的方法。帮他计算出答案。
         输入格式
       输入数据包含一行,两个正整数 n m,含义见题目描述。
         输出格式
       输出一个正整数,表示最开始有多少枚硬币是反面朝上的。
         样例输入
    2 3
         样例输出
    1
          数据规模和约定
      对于10%的数据,n、m <= 10^3;
      对于20%的数据,n、m <= 10^7;
      对于40%的数据,n、m <= 10^15;
      对于10%的数据,n、m <= 10^1000(10的1000次方)。
2017-04-07 14:35
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:10 
对于第6行第20列而言,因为6是1、2、3、6这4个数的倍数,20是1、2、4、5、10、20这6个数的倍数,所以第6行第20列,会被翻转 4*6 次
因为翻转偶数次就复原了,所以问题转化为 怎么确定一个数的因子数目是不是奇数

考虑 a*b = c,有a就必然有对应的b,除非a和b相等
因此有结论:仅当一个数是平方数时,它的因子数目是奇数

问题已经解决了,比如一个6行20列的矩阵
行有 1*1、2*2 小于等于 6
列有 1*1、2*2、3*3、4*4 小于等于 20
所以结果是 2*4=8

下次记得贴题目,否则鬼知道“矩阵翻牌”是个啥意思呀
2017-04-07 15:41
qwe142
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-4-6
收藏
得分:0 
回复 5楼 rjsp
恩恩,好的,谢谢!
2017-04-07 21:00
快速回复:蓝桥杯历届真题 矩阵翻牌
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019014 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved