写在前面的话:
我写的实际上是c语言,但是下面的那个代码的部分,我只能找到c++的按钮(或者说,我应该按c#吗?(ˇˍˇ) 想~),所以可能你复制过去会有一些小问题。
如果有人知道怎么解决的话,请告诉我!谢谢Thanks♪(・ω・)ノ
Chip和Dale发明了一种文本信息加密技术。他们事先秘密约定好矩阵的行数和列数。接着,将字符按如下方式编码:
1. 所有文本只包含大写字母和空格。
2. 每个字符均赋予一个数值:空格=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
#include
#include
void print(int arr[100][100],int r,int c)
{
int i,j;
for(i=0;i=0;j--)
{
printf("%d",b[j]);
}
printf("\n");
for(j=4;j>=0;j--)
{
arr[pr][pc]=b[j];
if(strcmp(direction,"right")==0)
{
pc++;
if(pc>=c||arr[pr][pc]>=0)//这个arr的判断完美地解决了范围缩小的情况
{
pc--;
pr++;
strcpy(direction,"down");
}
}
/*
这里的话,就是我们从arr[0][0]来看,开始是往右边走,等到最右边,也就是arr【0】【c-1】
这个位置被赋值之后,direction还是right,所以他会进来在进行一次pc++(此时pc变成c),
但是我们是要得到下一次的位置,所以我们首先要进行pc--(此时pc=c-1)然后就是向下(pr++)
这样我们就得到了下一的位置
*/
else if(strcmp(direction,"down")==0)//这里不要偷懒写错if
{
pr++;
if(pr>=r||arr[pr][pc]>=0)
{
pr--;
pc--;
strcpy(direction,"left");
}
}
else if(strcmp(direction,"left")==0)
{
pc--;
if(pc<0||arr[pr][pc]>=0)
{
pc++;
pr--;
strcpy(direction,"up");
}
}
else if(strcmp(direction,"up")==0)
{
pr--;
if(pr<=0||arr[pr][pc]>=0)
{
pr++;
pc++;
strcpy(direction,"right");
}
}
printf("every time arr is \n");
print(arr,r,c);//每一次运行的时候就去判断一下
}
}
for(i=0;i
最后的代码
#include
#include
int main()
{
int r,c;
char str[100];
scanf("%d %d",&r,&c);
getchar();
gets(str);
//首先进行一个二进制的转换
int i,j;
int len=strlen(str);
int arr[100][100];
memset(arr,-1,sizeof(arr));//初始化为-1
int pr=0,pc=0;
char direction[10]="right";
for(i=0;i=0;j--)
{
arr[pr][pc]=b[j];
if(strcmp(direction,"right")==0)
{
pc++;
if(pc>=c||arr[pr][pc]>=0)//这个arr的判断完美地解决了范围缩小的情况
{
pc--;
pr++;
strcpy(direction,"down");
}
}
else if(strcmp(direction,"down")==0)//这里不要偷懒写错if
{
pr++;
if(pr>=r||arr[pr][pc]>=0)
{
pr--;
pc--;
strcpy(direction,"left");
}
}
else if(strcmp(direction,"left")==0)
{
pc--;
if(pc<0||arr[pr][pc]>=0)
{
pc++;
pr--;
strcpy(direction,"up");
}
}
else if(strcmp(direction,"up")==0)
{
pr--;
if(pr<=0||arr[pr][pc]>=0)
{
pr++;
pc++;
strcpy(direction,"right");
}
}
}
}
for(i=0;i