12:变幻的矩阵

12:变幻的矩阵

总时间限制: 
1000ms

内存限制: 
65536kB
描述

有一个N x N(N为奇数,且1 <= N <= 10)的矩阵,矩阵中的元素都是字符。这个矩阵可能会按照如下的几种变幻法则之一进行变幻(只会变幻一次)。

现在给出一个原始的矩阵,和一个变幻后的矩阵,请编写一个程序,来判定原始矩阵是按照哪一种法则变幻为目标矩阵的。

1. 按照顺时针方向旋转90度; 
如:

1 2 3        7 4 1
4 5 6 变幻为  8 5 2
7 8 9        9 6 3

2. 按照逆时针方向旋转90度; 
如:

1 2 3        3 6 9
4 5 6 变幻为  2 5 8
7 8 9        1 4 7

3. 中央元素不变(如下例中的 5),其他元素(如下例中的3)与“以中央元素为中心的对应元素”(如下例中的7)互换; 
如:

1 2 3       9 8 7
4 5 6 变幻为 6 5 4
7 8 9       3 2 1

4. 保持原始矩阵,不变幻;

5. 如果 从原始矩阵 到 目标矩阵 的变幻,不符合任何上述变幻,请输出5

输入
第一行:矩阵每行/列元素的个数 N;
第二行到第N+1行:原始矩阵,共N行,每行N个字符;
第N+2行到第2*N+1行:目标矩阵,共N行,每行N个字符;
输出
只有一行,从原始矩阵 到 目标矩阵 的所采取的 变幻法则的编号。
样例输入
5
a b c d e
f g h i j
k l m n o
p q r s t
u v w x y
y x w v u
t s r q p
o n m l k
j i h g f
e d c b a
 1 #include<iostream>
 2 using namespace std;
 3 char a[100][100];
 4 char b[100][100];
 5 int main()
 6 {
 7     int n,i,j,tot=0,q,tot1=0,tota=0,totb=0;
 8     cin>>n;
 9     for(i=1;i<=n;i++)
10      {
11          for(j=1;j<=n;j++)
12           {
13               cin>>a[i][j];
14               tota+=a[i][j];
15           }
16      }
17     for(i=1;i<=n;i++)
18      {
19          for(j=1;j<=n;j++)
20           {
21               cin>>b[i][j];
22               totb+=b[i][j];
23           }
24       }
25     for(i=1;i<=n;i++)
26     {
27       for(j=1;j<=n;j++)
28     {
29     if(a[1][j]==b[i][n]&&a[n][j]==b[i][1]&&a[i][n]==b[n][j]&&a[i][1]==b[1][j]&&tota==totb)q=1;
30     }
31         for(j=1;j<=n;j++)
32     {
33     if(a[i][1]==b[n][j]&&a[n][j]==b[i][n]&&a[i][n]==b[1][j]&&a[1][j]==b[i][1]&&tota==totb)q=2;
34     }
35      }
36      for(i=1;i<=n;i++)
37     {
38       for(j=1;j<=n;j++)
39       {
40         if(a[i][j]==b[n-i+1][n-j+1])
41         tot1++;
42       }
43       if(tot1==n*n)
44       {
45       q=3;}
46      }
47      for(i=1;i<=n;i++)
48       {
49           for(j=1;j<=n;j++)
50            {
51                if(a[i][j]==b[i][j])tot++;
52            }
53          if(tot==n*n)
54          {
55              q=4;
56           }
57        }
58      if(q!=1&&q!=2&&q!=3&&q!=4)
59      {
60          q=5;
61        }
62       cout<<q;
63 }
64 以上代码可以骗分;
65 下为真;
66 #include<iostream>
67 #include<cstdio>
68 using namespace std;
69 char a[11][11];
70 char b[11][11];
71 bool x[6];
72 int main() {
73     int n;
74     cin>>n;
75     for(int i=1; i<=n; i++)
76         for(int j=1; j<=n; j++) {
77             cin>>a[i][j];
78         }
79     for(int i=1; i<=n; i++)
80         for(int j=1; j<=n; j++) {
81             cin>>b[i][j];
82         }
83     for(int i=1; i<=n; i++)
84         for(int j=1; j<=n; j++) {
85             if(a[i][j]!=b[j][n-i+1])x[1]=1;
86             if(a[i][j]!=b[n-j+1][i])x[2]=1;
87             if(a[i][j]!=b[n-i+1][n-j+1])x[3]=1;
88             if(a[i][j]!=b[i][j])x[4]=1;
89         }
90     for(int i=1; i<=4; i++) {
91         if(x[i]==0) {
92             cout<<i;
93             x[6]=1;
94         }
95
96     }
97     if(x[6]==0)cout<<"5";
98     return 0;
99 }

样例输出
3
时间: 2024-10-15 21:43:58

12:变幻的矩阵的相关文章

Openjudge-NOI题库-变幻的矩阵

题目描述 Description 有一个N x N(N为奇数,且1 <= N <= 10)的矩阵,矩阵中的元素都是字符.这个矩阵可能会按照如下的几种变幻法则之一进行变幻(只会变幻一次). 现在给出一个原始的矩阵,和一个变幻后的矩阵,请编写一个程序,来判定原始矩阵是按照哪一种法则变幻为目标矩阵的. 1. 按照顺时针方向旋转90度: 如: 1 2 3        7 4 1 4 5 6 变幻为  8 5 2 7 8 9        9 6 3 2. 按照逆时针方向旋转90度: 如: 1 2 3

整理小朋友在noi.openjudge上的作业(1)

NOI(题库正在建设中,做题纪录有可能会被删除,请注意) 第一章的统计放前面 1 编程基础之输入输出 10 0 0% 最基础有空补刷 2 编程基础之变量定义.赋值及转换 10 0 0% 最基础有空补刷 3 编程基础之算术表达式与顺序执行 20 0 0% 最基础有空补刷 4 编程基础之逻辑表达式与条件分支 21 0 0% 最基础有空补刷 5 编程基础之循环控制 45 10 22% 最基础有空补刷 6 编程基础之一维数组 15 5 33% 最基础有空补刷 7 编程基础之字符串 35 0 0% 有必要

HDU 2256 Problem of Precision 矩阵快速幂 + 共轭数

题意:中文不解释 解题思路: 中间矩阵为 5    2 12  5 初始矩阵为 2(根号b的系数) 5(a的系数) 解题代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #include<queue> 7 using namespace std; 8 int mod; 9 v

2014年至今的博文目录(更新至2017年06月12日)

拓扑学中凝聚点的几个等价定义(2017-06-12 07:51) 江苏省2017年高等数学竞赛本二试题(含解答)(2017-06-10 20:59) 裴礼文数学分析中的典型问题与方法第4章一元函数积分学练习(2017-06-10 11:04) 2017年厦门大学第十四届景润杯数学竞赛试卷(数学类)评分标准(2017-06-05 15:31) 2017年华东师范大学数学竞赛(数学类)试题(2017-06-05 15:28) 裴礼文数学分析中的典型问题与方法第3章一元微分学练习(2017-05-30

V3学院带你学习-缩短汉明码Hamming(12,8)的FPGA实现

此文章为原创出自 V3学院 www.v3edu.org,FPGA培训专家汉明码是一种实现简单并且可以检测和纠正错误的编码, 汉明码是在原编码的基础上附加一部分数据比特,使其满足纠错码的条件.它属于线性分组码,由于线性码的编码和译码容易实现,至今仍是应用最广泛的一类码.V3学院FPGA Verilog 汉明码实现,Hamming(12,8)表示数据位长K=8,编码后码字长N=12,校验位长R=12-8=4,最小汉明距离是H=3(观察其生成矩阵,不同行向量间最少不同比特的数量),纠错能力为(H-1)

『Python』Numpy学习指南第五章_矩阵和通用函数

简单的矩阵生成以及合并操作: np.mat('1 2 3;4 5 6;7 8 9')np.bmat('A B;B A')np.arange(1,10).reshape(3,3) 1 import numpy as np 2 3 4 5 '''通用函数''' 6 7 # 字符串创建矩阵 8 # 也可以使用数组创建 9 A = np.mat('1 2 3;4 5 6;7 8 9') 10 # 数组创建矩阵 11 A = np.mat(np.arange(1,10).reshape(3,3)) # n

矩阵的基本运算,相乘,逆,转置,伴随

1 矩阵基本操作 1.1创建向量 R里面有多种方法来创建向量(Vector),最简单的是用函数c().例如: >X=c(1,2,3,4) >X [1] 1 2 3 4 当然,还有别的方法.例如: >X=1:4 >X [1] 1 2 3 4 还有seq()函数.例如: > X=seq(1,4,length=4) > X [1] 1 2 3 4 注意一点,R中的向量默认为列向量,如果要得到行向量需要对其进行转置. 1.2创建矩阵 R中创建矩阵的方法也有很多.大致分为直接创建

[matlab]改变矩阵的大小并保存到txt文件

要完成的任务是,加载一个保存在txt文件中的矩阵, 并把它扩大10倍,并且要再次保存回去 %加载txt文件 >load('Matrix.txt'); %扩大10倍 repmat(Matrix,row column) % 这里的matrix 参数是要对其进行修改的matrix, 其中row是要新建的一个矩阵的行数, 而column是新建矩阵的列数 >Matrix = repmat(Matrix,10,1); % 这个就相当于  将Matrix矩阵 复制了10份,并且是按列排列的, 等同于 Mat

Spark MLlib之使用Breeze操作矩阵向量

这下面的练习中,需要自己将spark的jar包 添加进来. 在使用Breeze 库时,需要导入相关包: import breeze.linalg._ import breeze.numerics._ 具体练习如下: package leaning import breeze.linalg._ import breeze.numerics._ import breeze.stats.distributions.Rand /** * Created by dy9776 on 2017/12/5. *