a题:
比较简单的一个题,就是把两个名字_后面的内容取出来,然后在它们中间加一个small就行了。
代码:
#include
#include
#include
using namespace std;
const int maxn=33;
char str[101],fa[maxn],fb[maxn];
int main()
{
while(scanf("%s",&str)!=EOF)
{
int len=strlen(str),i=0;
for(i=0;i
就是一个编码和解码的过程,需要注意的是判断Error和Set特殊的情况。
代码:
#include
#include
#include
using namespace std;
int n;
void GetBinary(int num,int *a)
{
for(int i=5;i>=0;i--)
a[i]=0;
int cnt=0;
while(num)
{
a[cnt++]=num&1;
num/=2;
}
}
int GetNum(int num,char *a)
{
int ans=0;
for(int i=num-1;i>=0;i--)
if(a[i]=='1')
ans+=1<<(num-1-i);
return ans;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(n)
{
char op[20],a[5],b[5];
int sa,sb;
scanf("%s",op);
if(!strcmp(op,"SET"))
{
scanf("%1s%d",&a,&sa);
printf("000110");
int ans[10];
GetBinary(sa,ans);
for(int i=4;i>=0;i--)
printf("%d",ans[i]);
printf("00000");
printf("\n");
}
else
{
scanf("%1s%d,%1s%d",&a,&sa,&b,&sb);
int ans[10];
if(!strcmp(op,"ADD"))
printf("000001");
else if(!strcmp(op,"SUB"))
printf("000010");
else if(!strcmp(op,"DIV"))
printf("000011");
else if(!strcmp(op,"MUL"))
printf("000100");
else if(!strcmp(op,"MOVE"))
printf("000101");
GetBinary(sa,ans);
for(int i=4;i>=0;i--)
printf("%d",ans[i]);
GetBinary(sb,ans);
for(int i=4;i>=0;i--)
printf("%d",ans[i]);
printf("\n");
}
}
else
{
char a[20],b[20],c[20];
scanf("%6s%5s%5s",a,b,c);
int s=GetNum(6,a);
int na=GetNum(5,b);
int nb=GetNum(5,c);
if(s==0||s>6)
{
printf("Error!\n");
continue;
}
if(na&&nb)
{
if(s==1)
printf("ADD ");
else if(s==2)
printf("SUB ");
else if(s==3)
printf("DIV ");
else if(s==4)
printf("MUL ");
else if(s==5)
printf("MOVE ");
else
{
printf("Error!\n");
continue;
}
}
else if(na)
{
if(s!=6)
{
printf("Error!\n");
continue;
}
printf("SET R%d\n",na);
continue;
}
else
{
printf("Error!\n");
continue;
}
printf("R%d,",na);
printf("R%d\n",nb);
}
}
return 0;
}
最开始确实没有发现下标和加起来是一个定值,用Si,j表示第i行第j列的内容,可以得到Sij=t[n-1-i+k]*t[j+n-1-k] (0<=k 代码:#include