zoj 2989 Encoding

本文介绍了一个算法问题的解决方法,该问题要求将输入的字母串转换为二进制表示,并按照特定的蛇形顺序填充到矩阵中。通过预先定义的二进制字符串数组,将每个字符映射为对应的二进制形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:<space> = 0, A = 1, B = 2, C = 3, ..., Y = 25, Z = 26 (10进制额度)
     给你字符窜,让你输出数字,每个数字代表二进制的五位数,按一定蛇形顺序排列,然后
     从首位按顺序输出 比如ACM 输入行列都是4 4
最后输出是000010001101101
#include<stdio.h>
#include<stdlib.h>
#include<string.h>   
int vis[500][500];
int a[500][500];
int main()
{
	char Gra[30][6]={"00000","00001","00010","00011","00100","00101","00110","00111",
		           "01000","01001","01010","01011","01100","01101","01110","01111",
				   "10000","10001","10010","10011","10100","10101","10110","10111",
				   "11000","11001","11010"}; 
   int T,c,r;
   char ch1[200];//存储输入的字母
   int ch2[500];
   int ttt=1;
   int i,j;
   scanf("%d",&T);
   while(T--)
   {
	   memset(vis,0,sizeof(vis));
	   scanf("%d%d",&r,&c);
	   getchar();
	   gets(ch1);
	   int len=strlen(ch1);
	   int cas=0;
	   //将acm这样的值变化成数字赋予ch2
	   for (i=0;i<len;i++)//ch1的长度
		   for (j=0;j<5;j++)
		   {
			   if(ch1[i]==' ')  ch2[cas++]=Gra[0][j]-'0';
			   else  ch2[cas++]=Gra[ch1[i]-'A'+1][j]-'0';
		   }
		   //将未填满的位置填充0
		   for (int k=len*5;k<r*c;k++)
			   ch2[cas++]=0;
		   int t=1;
		   int x=0,y=0;//控制位置
		   len=r*c;
           a[0][0]=ch2[0];
		   vis[0][0]=1;
		   while(t<len)
		   {
		      while( y+1<c && !vis[x][y+1]) 
			  {
				  vis[x][++y]=1;
				  a[x][y]=ch2[t++];//右
			  }
			  while( x+1<r && !vis[x+1][y])
			  {
				  vis[++x][y]=1;
				  a[x][y]=ch2[t++];//下
			  }
			  
			  while( y-1>=0 && !vis[x][y-1]) 
			  {
			      vis[x][--y]=1;
				  a[x][y]=ch2[t++];//左
			  }
			  while( x-1>=0 && !vis[x-1][y]) 
			  {
		 	      vis[--x][y]=1;
				  a[x][y]=ch2[t++];//上
			  }
		   }
		   printf("%d ",ttt++);
		   for (i=0;i<r;i++)
			   for (j=0;j<c;j++)
				   printf("%d",a[i][j]);
          printf("\n");
   }
   return 0;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值