Description
有一个N*N的字符矩阵,从上到下依次记为第1行,第2行,……,第N行,从左至右依次记为第1列,第2列,……,第N列。 对于这个矩阵会进行一系列操作,但这些操作只有两类:
(1) R: 将矩阵逆时针旋转90度;
(2) P x y: 将此时第x行第y列的字符打印出来,其中1 <= x, y <= N。
 
Input
输入数据的第一行包含一个整数T (1 <= T <= 20),表示接下来一共有T组测试数据。 对于每组测试数据,第一行包含一个整数N (1 <= N <= 300),含义同上。接下来一共有N行,每行均包含N个大写字母,描述了这个矩阵的初始情况。再接下来一行包含一个整数M (1 <= M <= 10000),表示一共对矩阵进行了M次操作。接下来M行,每行均包含一个符合上述格式的操作,依次描述了这M个操作。
 
Output
对于每个第(2)类操作,用一行打印出指定位置的字符。 相邻的两组测试数据中间用一个空行隔开。
 

Sample Input

3
2
AB
CD
3
P 1 1
R
P 1 1
2
AB
CD
4
R
R
P 2 1
P 1 2
3
ABC
DEF
GHI
5
P 3 3
R
P 3 3
R
P 3 3

Sample Output

A
B B
C I
G
A

Hint

这个题目主要练习如何读入字符串,以及对数组的使用。

初始矩阵直接用读入字符串的方式读入就可以了,但是每个操作要如何读入呢?先用getchar(x)或者scanf(“%c”, &x)读入一个字符,然后再根据读入的字符判断是否要再读入两个整数?

其实getchar(x)或者scanf(“%c”, &x)有的时候很令人头疼(也许只有你亲自尝试过才能体会到), 因为他不仅可以读入一个字母,也可以读入空格、换行等等,因此如果我们不细加控制的话,scanf(“%c”, &x)很可能读到的未必是我们想要的那个字符。但scanf(“%s”, s)就不一样了,会忽略掉空格、换行等等,就像我们使用scanf(“%d”, &x)读整数那样。因此即使只有一个字母,我们也更推荐使用scanf(“%s”, s)的形式去读入,然后s[0]自然就是那个字符了。

这个题目具体要怎么做呢?看似直接模拟两种操作就好了,打印字符最简单了,而旋转矩阵也不是很麻烦,不过可能要借助一个“中间矩阵”来完成旋转更好一些。但问题来了,如果每个R我们都进行旋转的话,实际上代价是很大的,对于这个题目而言会超时。也许你会机智地想到把相邻的R操作合并成一个,这样代价会小一点,是的,但是这样并不能解决根本问题,比如R和P是交替出现的。

 但其实我们可以做到只要旋转3次矩阵,你想到了吗?

或者也许我们根本没必要按题意来去旋转矩阵?是否可以直接找到要打印的字符在初始矩阵中的位置呢?

最后注意相邻两组测试数据之间要打印一个空行,就像在“A Sample Problem”中说的那样,OJ对于输出的格式要求是很严格的。

同样的,我会给出示例代码,如果你觉得编写代码的时候有些困难的话可以参考一下示例代码,但最后一定要按自己的思路一气呵成一份完整的代码并获得“Accept”哟~

#include <iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
const int maxn=+;
char a[maxn][maxn];
char solve(int n,int x,int y,int cnt)
{
if(cnt==) return a[x][y];
if(cnt==) return a[y][n+-x];
if(cnt==) return a[n+-x][n+-y];
if(cnt==) return a[n+-y][x];
}
int main()
{
int t,n,m,i;
char c[];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=;i<=n;i++)
scanf("%s",a[i]+);//注意这里,指针加一
scanf("%d",&m);
int cnt=;
int x,y;
while(m--)
{
scanf("%s",c);
if(c[]=='R') cnt++;
else
{
scanf("%d%d",&x,&y);
printf("%c\n",solve(n,x,y,cnt%));
}
}
if(t) printf("\n");
}
return ;
}

上面这是c语言代码,c语言的输入输出

下面给出C++代码

个人认为C++的输入输出更加简洁

#include <iostream>
using namespace std;
char c[][];
int t, n, m, sum, x, y;
char f(int n,int x,int y,int sum)
{
if (sum == )return c[x][y];
if (sum == )return c[y][n+-x];
if (sum == )return c[n + - x][n + - y];
if (sum == )return c[n+-y][x];
}
int main()
{
ios_base::sync_with_stdio(false);
char ch;
cin >> t;
while (t--)
{
cin >> n;
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++)
cin >> c[i][j];
cin >> m ;
sum = ;
while (m--)
{
cin >> ch;
if (ch == 'R')sum++;
else
{
cin >> x >> y;
cout << f(n,x,y,sum%) << endl;
}
}
cout << endl;
}
return ;
}

*/

//--------------------
/.................................................................................................................................................................................................................................
/
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
int main()
{
 char s[6];
// for(int i=0;i<6;i++){
//  scanf("%c",&s[i]);
// }
// scanf("%s",s);
cin>>s;
    printf("%s",s); 
 cout<<s;
 return 0;
}
 
//cin和scanf("%s")很像,只能读入非空格符和非换行符,如果第一个输入的字符就是空格,则忽略;如果第一个不是空格,则读到有空格或者换行符为止
//scanf("%c")则可以读取输入空格符和换行符。当读入的字符串小于定义的空间时,即使输入换行符,也不会结束输入,只有输入的超过空间时,输入换行符才会停止输入
 // 如果输入的最后一个空间恰好是换行,则停止输入;
 
 
 
 
 
 
 

csu oj 1341 string and arrays的更多相关文章

  1. CSUOJ 1341 String and Arrays

    Description 有一个N*N的字符矩阵,从上到下依次记为第1行,第2行,--,第N行,从左至右依次记为第1列,第2列,--,第N列.    对于这个矩阵会进行一系列操作,但这些操作只有两类:  ...

  2. 中南oj String and Arrays

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?cid=2072&pid=1 Problem B: String and Arrays T ...

  3. API(Scanner、Random、ArrayList、String、Arrays、Math)

    Scanner import java.util.Scanner; /* public int nextInt(): to get a integer from keyboard public Str ...

  4. List<String> bikeList = Arrays.asList(bikeuuids);

    最近项目中  List<String> bikeList = Arrays.asList(bikeuuids);报错 而且console里面没有特别有用的 bikeList.add(&qu ...

  5. java第4天:String static Arrays类,Math类

    1 字符串的概述和特点 字符串一旦创建,是不可变的. 有双引号的就是字符串 *** 2 字符串的三种构造方法 2-1 第一种: 格式:String str = new String();| :-| 2 ...

  6. Water --- CSU 1550: Simple String

    Simple String Problem's Link:   http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1550 Mean: 略. analy ...

  7. csu oj 1339: 最后一滴血

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1339 1339: 最后一滴血 Time Limit: 1 Sec  Memory Limit: 1 ...

  8. csu oj 1330 字符识别?

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1330 1330: 字符识别? Time Limit: 1 Sec  Memory Limit: 1 ...

  9. Java学习笔记之——String和Arrays常用方法

    一.String常用方法 1.subString(int beginIndex,int endIndex) 截取字符串 从beginIndex开始截取,截取endIndex-beginIndex的长度 ...

随机推荐

  1. P2053 [SCOI2007]修车

    思路 很妙的网络流题目 最开始我简单的想直接把n个车的点和m个人员的点直接用cap=t(i,j)的边连起来,显然是假的,因为没有考虑到车主等待的时间长度 然后考虑分析将\(w_1,w_2,\dots, ...

  2. Kylin介绍2

    原理 官网 doc cube介绍 安装 案例 企业级特性 Apache Kylin 1.5的新功能和架构改变 Java  API 通过java代码对kylin进行cube build kylin从入门 ...

  3. Lintcode27-Reverse 3-digit Integer

    Reverse a 3-digit integer. Example Example 1: Input: number = 123 Output: 321 Example 2: Input: numb ...

  4. python学习 day011打卡 迭代器

    本节的主要内容: 1.函数名的使用以及第一类对象 2.闭包 3.迭代器 一.函数名的运用. 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量. 1.函数名的内存地址 def fun ...

  5. 跳跳虎回家(国庆10.1模拟赛T2)

    题目: [题目描述] 跳跳虎在外面出去玩忘了时间,现在他需要在最短的时间内赶回家. 跳跳虎所在的世界可以抽象成一个含有 n 个点的图(点编号从 1 到 n ),跳跳虎现在在 1 号点,跳跳虎的家在 n ...

  6. 测试服务器上多个tomcat配置Nginx访问

    user nginx; worker_processes 4; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; wor ...

  7. 3.1 vue组件的使用

    1. 组件 组件: 组件是一个局部功能界面,它包含了所有要实现这个功能界面的相关资源,如css.html等. 组件化编程: vue文件包含3个部分 <template> <div&g ...

  8. java 之2D过气游戏类的写法

    2D游戏中各对象的父类 package cn.littlepage.game; import java.awt.Graphics; import java.awt.Image; import java ...

  9. Trailing Zeroes (I) LightOJ - 1028

    题意就是给你一个数让你找它的正因子个数(包括自身,不包括1),这个地方用到一个公式,如果不用的话按正常思路来写会TL什么的反正就是不容易写对. 求任意一个大于1的整数的正因子个数 首先任意一个数n,n ...

  10. React + Ant Design网页,配置

    第一个React + Ant Design网页(一.配置+编写主页) 引用博主的另外一篇VUE2.0+ElementUI教程, 请移步:  https://blog.csdn.net/u0129070 ...