2938: 字母旋转游戏
来源:互联网 发布:淘宝有逆战招打手的吗 编辑:程序博客网 时间:2024/05/29 13:56
描述
给定两个整数M,N,生成一个M*N的矩阵,矩阵中元素取值为A至Z的26个字母中的一个,A在左上角,其余各数按顺时针方向旋转前进,依次递增放置,当超过26时又从A开始填充。例如,当M=5,N=8时,矩阵中的内容如下:
A B C D E F G H
V W X Y Z A B I
U J K L M N C J
T I H G F E D K
S R Q P O N M L
输入
M为行数,N为列数,其中M,N都为大于0的整数,M和N不大于50。
输出
分行输出相应的结果
样例输入
4 9
样例输出
A B C D E F G H I
V W X Y Z A B C J
U J I H G F E D K
T S R Q P O N M L
思路:定义一个二位数组表示该矩阵,我定义的是一个二位整形数组,当然你也可以定义一个二位的字符数组.然后可以深搜的去旋转改变数组里的数值,当然也可以模拟路径去改变数值,下面我给出了两种方法的源码(ps:代码写的不好别喷哦),我是在堆里定义的数组,所以初始里面全是0,于是我就用1~26表示26个字母,当然你也可以去显示的初始化,那样你初始化为-1,就可以用0~25表示26个字母,这样更方便.
//深搜#include <iostream>#include <cstdio>using namespace std;int M,N;int a[50][50];int dx[] = {1,0,-1,0};int dy[] = {0,1, 0, -1};void dfs(int y,int x,int n,int flag){ if(n>M*N || a[y][x] != 0 || x<0 || y<0 || x>=N || y>=M) return ; a[y][x] = n%26+1; n++; if(flag == 3)//如果向上走,那么就继续向上 dfs(y+dy[3],x+dx[3],n,3); for(int i= 0 ; i < 4; i++) { dfs(y+dy[i],x+dx[i],n,i); }}int main(){ cin>>M>>N; dfs(0,0,0,0); for(int i= 0 ; i < M ; i++) { for(int j = 0 ; j < N ;j++) { printf(" %c",a[i][j]+'A'-1); } printf("\n"); }}
//模拟#include <iostream>#include <cstdio>using namespace std;int a[50][50];int main(){ int i , j , k , m , n; int flag = 0;//0向→,1向↓,2向←,3向↑ cin>>m>>n; i = j = 0; for(k = 0 ; k < n*m ; k++) { if(flag == 0) { a[i][j++] = k%26+1; if(j==n || a[i][j]!=0) { flag = 1; i++; j--; } } else if(flag == 1) { a[i++][j] = k%26+1; if(i==m || a[i][j]!=0) { flag = 2; j--; i--; } } else if(flag == 2) { a[i][j--] = k%26+1; if(j < 0 || a[i][j] !=0) { flag = 3; i--; j++; } } else if(flag == 3) { a[i--][j] = k%26+1; if(i < 0 || a[i][j]!=0) { flag = 0; i++; j++; } } } for(i = 0 ; i < m ; i++) { for(j = 0 ; j < n ; j++) { printf(" %c",a[i][j]+'A'-1); } printf("\n"); } return 0;}
一学妹让我帮她改了一代码后从其基础上又得到下面代码:
#include <cstdio>#include <iostream>using namespace std;const int MAX_N=100;int a[MAX_N][MAX_N];int main(){ int m,n,tot=0,x=0,y=0; a[0][0] = 1; cin>>m>>n; while(tot<n*m-1) { while(y+1<n && a[x][y+1]==0) a[x][++y]=(++tot)%26+1; while(x+1<m && a[x+1][y]==0) a[++x][y]=(++tot)%26+1; while(y-1>=0 && a[x][y-1]==0) a[x][--y]=(++tot)%26+1; while(x-1>=0 && a[x-1][y]==0) a[--x][y]=(++tot)%26+1; } for(x=0;x<m;x++) { for(y=0;y<n;y++) { printf(" %c",a[x][y]+'A'-1); } printf("\n"); } return 0;}
0 0
- 2938: 字母旋转游戏
- POJ 字母旋转游戏
- 字母旋转游戏
- poj3752 字母旋转游戏
- 字母旋转游戏
- poj 3752字母旋转游戏
- poj 3752 字母旋转游戏
- POJ 3752 字母旋转游戏
- POJ 3752 字母旋转游戏
- POJ 3752 字母旋转游戏
- poj 3752 字母旋转游戏
- POJ 3752 字母旋转游戏
- POJ 3752 字母旋转游戏
- POJ3752 字母旋转游戏【水题】
- NUC1422 字母旋转游戏【水题】
- pku 3752 字母旋转游戏 解题报告
- poj 3752 字母旋转游戏 类似搜索
- SDUT 2254 字母旋转游戏(&&POJ 3752)
- python中 逗号的 用法
- ORACLE WHER条件的执行顺序是不是自右向左
- 博科资讯:C2B模式是未来电商及电商管理系统的发展之道
- 登陆框控件
- Android中,SD卡上的媒体文件(图片、视频)的改变与通知
- 2938: 字母旋转游戏
- 后台遍历一个HTML页面
- 设计模式在C中的应用方式
- .net的MSMQ异步调用
- 诊断
- 长沙降温8.5℃ 男子盗窃后杀害漂亮女白领
- [codility]FrogRiverOne
- 在xcode5中修改整个项目名
- 程序2:奖金分段提成