/*========================================================================
25:螺旋加密
总时间限制: 1000ms 内存限制: 65536kB
描述
Chip和Dale发明了一种文本信息加密技术。他们事先秘密约定好矩阵的行数和列数。
接着,将字符按如下方式编码:
1. 所有文本只包含大写字母和空格。
2. 每个字符均赋予一个数值:空格=0,A=1,B=2,……,Y=25,Z=26。
从左上角开始,按顺时针旋转的方式,将每个字符对应数值的5位二进制数依次填入矩阵。
最后用0将矩阵补充完整。例如,对于信息“ACM”,行列数均为4时,矩阵将被填充为:
0000
1101
0010
1100
其中,A=00001,C=00011,M=01101.
矩阵中的数字按行连起来形成数字串,完成加密。
例子中的信息最终会被加密为:0000110100101100。
输入
一行。首先是两个整数R(1≤R≤20)和C(1≤C≤20),表示行数和列数。
之后是一个只包含大写字母和空格的字符串。字符串的长度≤(R*C)/5。
R和C之间以及C和字符串之间均用单个空格隔开。
输出
一行,为加密后的二进制串。注意你可能需要用0将矩阵补充完整。
样例输入
4 4 ACM
样例输出
0000110100101100
来源
Greater NY 2007
==========================================================================*/
 #include<stdio.h>
#include<string.h> #define localTest 1
#define maxR 23
#define maxC 23 int main(int argc, char *argv[])
{
int R,C,i,j,t,k;
char str[];
char a[maxR][maxC],dic[][],dic2[]="";
int len;
int R2,C2; #ifdef localTest
freopen("25.in","r",stdin);
#endif scanf("%d %d ",&R,&C); //注意这里的输入方式
gets(str);
//printf("%d %d%s\n",R,C,str); //初始化a[][]数组
for(i=;i<maxR;i++)
for(j=;j<maxC;j++)
{ a[i][j]=''; } //提前准备好二进制数据和字母的映射表
for(i=;i<;i++)
{
t=i;
for(j=;j>=;j--)
{
dic[i][j]=t%+'';
t=t/;
}
dic[i][]='\0';
//printf("%2d-->%s\n",i,dic[i]); 输出字典做检验
} len=strlen(str);
for(i=;i<len;i++)
{
if(str[i]==' ') strcat(dic2,dic[]);
else
{
t=str[i]-'A'+;;
strcat(dic2,dic[t]);
}
}
//printf("%s\n",dic2);输出检测 if(R==)//只有一行
{
printf("%s",dic2);
i=len*+;
while(i<=C)
{
printf("");
i++;
}
printf("\n");
}
else if(C==)//只有一列
{
for(i=;dic2[i]!='\0';i++)
printf("%c\n",dic2[i]);
i=len*+;
while(i<=R)
{
printf("0\n");
i++;
}
}
else
{
k=;
i=;j=;
R2=R;C2=C;
while(dic2[k]!='\0')
{
for(t=;t<C&&dic2[k]!='\0';t++)
{ a[i][j]=dic2[k];k++;j++;} //填充一个环的上面那一条边
for(t=;t<R&&dic2[k]!='\0';t++)
{ a[i][j]=dic2[k];k++;i++;} //填充一个环的右侧那一条边
for(t=;t<C&&dic2[k]!='\0';t++)
{ a[i][j]=dic2[k];k++;j--;} //填充一个环的下面那一条边
for(t=;t<R&&dic2[k]!='\0';t++)
{ a[i][j]=dic2[k];k++;i--;} //填充一个环的左侧那一条边 i++;j++;
R-=;C-=;
if(R==)//只剩下一行
{
for(t=;t<=C&&dic2[k]!='\0';t++,k++)
{ a[i][j]=dic2[k];j++;}
}
else if(C==)//只剩下一列
{
for(t=;t<=R&&dic2[k]!='\0';t++,k++)
{ a[i][j]=dic2[k];i++;}
}
} for(i=;i<R2;i++)//将螺旋矩阵按行输出
{
for(j=;j<C2;j++)
printf("%c",a[i][j]);
//printf("\n");测试输出
}
} return ;
}

折腾好长时间,同时输入整数和字符串确实有点蛋疼。请注意代码中输入的方式。

另外,螺旋矩阵的旋转遍历也是重点。

最后,要特殊考虑只有一行、一列或者只剩下一行、一列的情况。这个时候要特殊处理。

其他的解题方式也很有参考价值:http://blog.csdn.net/zhengyuan233/article/details/53161002

openjudge 螺旋加密的更多相关文章

  1. noi题库(noi.openjudge.cn) 1.8编程基础之多维数组T21——T25

    T21 二维数组右上左下遍历 描述 给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按从左上到右下的对角线顺序遍历整个数组. 输入 输入的第一行上有两个整数,依次为 ...

  2. 投入OJ的怀抱~~~~~~~~~~

    OpenJudge C20182024 信箱(1) 账号 修改设定 退出小组 管理员 frank 林舒 Dzx someone 李文新 公告 11-05 程序设计与算法(大学先修课) 成员(61910 ...

  3. AC日记——加密的病历单 openjudge 1.7 12

    12:加密的病历单 总时间限制:  1000ms 内存限制:  65536kB 描述 小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会. 在药房实习期间,小英扎实的专业基础获得了医生的一致 ...

  4. 关于CryptoJS中md5加密以及aes加密的随笔

    最近项目中用到了各种加密,其中就包括从没有接触过得aes加密,因此从网上各种查,官方的一种说法: 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学 ...

  5. “不给力啊,老湿!”:RSA加密与破解

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 加密和解密是自古就有技术了.经常看到侦探电影的桥段,勇敢又机智的主角,拿着一长串毫 ...

  6. .NET 对接JAVA 使用Modulus,Exponent RSA 加密

    最近有一个工作是需要把数据用RSA发送给Java 虽然一开始标准公钥 net和Java  RSA填充的一些算法不一样 但是后来这个坑也补的差不多了 具体可以参考 http://www.cnblogs. ...

  7. AES加密

    package com.edu.hpu; import java.math.BigInteger; import java.security.MessageDigest; import java.se ...

  8. Android数据加密之MD5加密

    前言: 项目中无论是密码的存储或者说判断文件是否是同一文件,都会用到MD5算法,今天来总结一下MD5加密算法. 什么是MD5加密? MD5英文全称“Message-Digest Algorithm 5 ...

  9. PHP的学习--RSA加密解密

    PHP服务端与客户端交互或者提供开放API时,通常需要对敏感的数据进行加密,这时候rsa非对称加密就能派上用处了. 举个通俗易懂的例子,假设我们再登录一个网站,发送账号和密码,请求被拦截了. 密码没加 ...

随机推荐

  1. 谈谈对hibernate的理解

    它是ORM思想的一个实现,对JDBC进行了很好的封装,它通过配置使JavaBean对象和数据库表之间进行映射,并提供对增.删.改.查便利的操作方法,同时支持事务处理,它对数据库记录还提供了缓存机制,提 ...

  2. freeswitch:error C2220: 警告被视为错误 - 没有生成“object”文件

    项目 -> 属性-> 配置属性 -> c/c++ -> 将警告视为错误 -> 否 参考: http://www.cnblogs.com/kex1n/archive/201 ...

  3. linux下进程突然断掉后的日志查询

    最近写了一个实现监控的服务,可某天去看的时候进程突然木有了,这就捉急了,好好的是啥原因了呢?不会有人不小心把偶的进程关掉了把! 后发现一个linux日志文件:/var/log/messages 打开文 ...

  4. Hadoop基本操作

    命令基本格式: hadoop fs -cmd < args > 1.ls hadoop fs -ls / 列出hdfs文件系统根目录下的目录和文件 hadoop fs -ls -R / 列 ...

  5. JavaScript获取一段html片段中a标签的href值

    最近,做项目中有一个需求,页面中有一个文本编辑器,里面写的内容最后生成了html代码片段,在另一个页面需要前一个页面文本编辑器的html代码片段中的a标签的href值,就尝试做了,因为不太熟悉js,所 ...

  6. Cookies的作用

    Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).Cookies就是服务器暂存放在你的电脑里的资料(.tx ...

  7. 11、Linq的使用

    一.种类 1.Linq to Objects,实现了IEnumerable<T>集合对象的集成查询 2.Linq to sql,针对关系数据库MSSQL的解释查询 3.Linq to En ...

  8. 用H5和js写一个移动端自定义播放器

    前言 由于html5自带的播放器样式不怎么好看,大多数人都是自己写一个来满足业务需求.这一次的需求如下: 1.不要上一曲下一曲 2.有进度条和播放暂停按钮 3.有时间显示 demo实现功能 1.进度条 ...

  9. MySQL的左连接、右连接和全连接的实现

    表student:+----+-----------+------+| id | name | age |+----+-----------+------+| 1 | Jim | 18 || 2 | ...

  10. 第一章Android系统移植与驱动开发概述--读书笔记

    以前,初步学习过嵌入式Linux驱动开发的基础课程,对于驱动开发可以说是有了一点点微末的基础吧.首先我们要对Android嵌入式系统有一个初步的认识,Android系统发展到今天已经具备了完善的架构. ...