25:螺旋加密(1.8编程基础之多维数组)
来源:互联网 发布:睡别人女朋友 知乎 编辑:程序博客网 时间:2024/05/29 18:25
25:螺旋加密
总时间限制: 1000ms 内存限制: 65536kB
描述
Chip和Dale发明了一种文本信息加密技术。他们事先秘密约定好矩阵的行数和列数。接着,将字符按如下方式编码:
所有文本只包含大写字母和空格。
每个字符均赋予一个数值:空格=0,A=1,B=2,……,Y=25,Z=26。
按照下图所示的方式,将每个字符对应数值的5位二进制数依次填入矩阵。最后用0将矩阵补充完整。例如,对于信息“ACM”,行列数均为4时,矩阵将被填充为:
将矩阵中的数字按行连起来形成数字串,完成加密。例子中的信息最终会被加密为:0000110100101100。
输入
一行。首先是两个整数R(1≤R≤20)和C(1≤C≤20),表示行数和列数。之后是一个只包含大写字母和空格的字符串。字符串的长度≤(R*C)/5。R和C之间以及C和字符串之间均用单个空格隔开。
输出
一行,为加密后的二进制串。注意你可能需要用0将矩阵补充完整。
样例输入
4 4 ACM
样例输出
0000110100101100
http://blog.csdn.net/c20192419mys/article/details/60139015
本题目需要转换二进制,在C++中可以用自定义函数转换,暂存于一个数组中,由于二进制只有“1”和“0”,所以可以使用“bool”数组储存(本样例中是整型数组)。之后我们可以发现填入时,有4种填入方式:1.向右;2.向下;3.向左;4.向上。我们可以定义一个整型参数“lx”,有四个值,分别代表一种填入方式,用“switch”分类讨论。题目中要求剩余部分用“0”补充完整,但不用实际操作,在数组定义时的初始化即可完成。注意填入的顺序。
#include<cstdio>#include<cstring>int ch[450],len,sch[23][23]; //分别为转换后的2进制串,2进制串的位数,填入后的二维数组bool chs[23][23]; //辅助二维数组void ten_two(char); //2进制转换的函数void strue(int,int); //辅助二维数组的初始化函数int main(){ int r,c; char s[100]={}; scanf("%d%d%*c",&r,&c); strue(r,c); gets(s); for(int i=0;i<strlen(s);i++) //转换 ten_two(s[i]); int x=0,y=0,tot=0,lx=1; while(tot<r*c) { switch(lx) { case 1: //向左 if(!chs[x][y+1] || y==c-1) //转向条件 { lx=2; sch[x][y]=ch[tot]; chs[x][y]=false; x++; tot++; } else { sch[x][y]=ch[tot]; chs[x][y]=false; y++; tot++; } break; case 2: //向下 if(!chs[x+1][y] || x==r-1) //转向条件 { lx=3; sch[x][y]=ch[tot]; chs[x][y]=false; y--; tot++; } else { sch[x][y]=ch[tot]; chs[x][y]=false; x++; tot++; } break; case 3: //向右 if(!chs[x][y-1] || y==0) //转向条件 { lx=4; sch[x][y]=ch[tot]; chs[x][y]=false; x--; tot++; } else { sch[x][y]=ch[tot]; chs[x][y]=false; y--; tot++; } break; case 4: //向上 if(!chs[x-1][y] || x==0) //转向条件 { lx=1; sch[x][y]=ch[tot]; chs[x][y]=false; y++; tot++; } else { sch[x][y]=ch[tot]; chs[x][y]=false; x--; tot++; } break; } } for(int i=0;i<r;i++) for(int j=0;j<c;j++) printf("%d",sch[i][j]); return 0;}void ten_two(char c){ int i=0,op=c-'A'+1,x[5]={}; while(i<5) { x[i]=op%2; op/=2; i++; } for(int js=4;js>=0;js--,len++) ch[len]=x[js];}void strue(int r,int c){ for(int i=0;i<r;i++) for(int j=0;j<c;j++) chs[i][j]=true;}
- 25:螺旋加密(1.8编程基础之多维数组)
- NOI题解(1.8编程基础之多维数组)(待补全)
- NOI题解(1.8编程基础之多维数组)(待补全)
- 11:图像旋转(1.8编程基础之多维数组)
- 04:错误探测(1.8编程基础之多维数组)
- 21:二维数组右上左下遍历(1.8编程基础之多维数组)
- 22:神奇的幻方/NOI/ 1.8编程基础之多维数组
- 07:矩阵归零消减序列和(1.8编程基础之多维数组)
- 12:变幻的矩阵( 1.8编程基础之多维数组)
- 16:矩阵剪刀石头布(1.8编程基础之多维数组)
- 13:图像模糊处理(1.8编程基础之多维数组)
- 17:最好的草( 1.8编程基础之多维数组)
- 二维数组练习25_螺旋加密
- Openjudge 1.8 25:螺旋加密
- C++基础编程----3.2多维数组
- 25:螺旋加密
- C++基础---多维数组
- Java编程那些事儿48—多维数组基础
- Java8 的日期排序
- C#_Excel操作方法汇总
- 16. 3Sum Closest(找出和最接近给定值的三个数)
- Linux下python安装pip
- CF--518A--Strange Addition
- 25:螺旋加密(1.8编程基础之多维数组)
- UIMenuController功能扩展
- 2017.9.18
- java native调用
- 最长公共子序列Lcs---51--Nod
- hdu6214—Smallest Minimum Cut(最小割的最少割边)
- Leetcode 169 & 229
- 解决Winform程序在不同分辨率系统下界面混乱
- E:奇怪的奖励规则