这题算是一道比较简单的了!
关键点:
①输入的字符串中每5个字符表示一个加密前的字符。
②每个加密前的字符用5位二进制码代替。
③输入的字符串中字母表示对应位的二进制码为0,数字表示对应位的二进制码为1。
额,可是很纠结的是我的代码TLE了,还没弄明白,贴在这以后研究吧。也欢迎大家给意见呀。
TLE代码:
#include<iostream>
using namespace std;
const int N=10001,M=2001;
char a[N],b[M];
int c[5];
const int d[]={16,8,4,2,1};
/*
inline char change(int x) //整型转字符
{
return x+65;
}
*/
inline void deal() //翻译
{
char *ch=a;
int i,j=0,temp;
while(*ch!=NULL)
{
for(i=0;i<5;i++)
{
if(*(ch+i)>='A' && *(ch+i)<='Z')
c[i]=0;
else
c[i]=1;
}
temp=0;
for(i=0;i<5;i++)
temp+=c[i]*d[i];
//b[j++]=change(temp);
b[j++]=temp+'A';
ch+=5;
}
b[j]=NULL; //结束标志
}
int main()
{
int n;
while(cin>>n , n%5==0)
{
cin>>a;
deal();
cout<<b<<endl;
}
return 0;
}
AC代码,16MS
#include<iostream>
using namespace std;
const int N=10001;
char a[N];
int c[5];
const int d[]={16,8,4,2,1};
int main()
{
int n,i,j;
char ch;
while(cin>>n)
{
for(i=0,j=0;i<n;i++,j++)
{
cin>>a[i];
if(a[i]>='0' && a[i]<='9')
c[j]=1;
else
c[j]=0;
if(j==4)
{
j=-1;
ch=c[0]*d[0]+c[1]*d[1]+c[2]*d[2]+c[3]*d[3]+c[4]*d[4]+'A';
cout<<ch;
}
}
cout<<endl;
}
return 0;
}
欢迎拍砖!