您的位置:首页 > 其它

POJ1051

2016-06-11 00:22 225 查看
看着挺麻烦的,写起来倒很顺手,把莫斯吗当做数字来存储就好,剩下的就是判断了。

今天刚搞定毕设,双爽爽的,写道题庆祝一下,就是代码太乱,懒得改。

#include <iostream>

#include <math.h>

using namespace std;

int po(int m){

int i,k=1;

for(i=0;i<m;i++)

k*=10;

return k;

}

int l[50],fn[3000],num[10000],xl[1000];

int main(){
int zn[100]={

12,

2111,

2121,

211,

1,

1121,

221,

1111,

11,

1222,

212,

1211,

22,

21,

222,

1221,

2212,

121,

111,

2,

112,

1112,

122,

2112,

2122,

2211,

1122,

1212,

2221,

2222
};

int i;

for(i=0;i<50;i++){

fn[zn[i]]=i;

if(zn[i]>1000)

l[i]=4;

else{

if(zn[i]>100)

l[i]=3;

else

{

if(zn[i]>10)

l[i]=2;

else

l[i]=1;

}

}

}

int z=0,kl=0,kn=0,m=0,ml=0,km=0,t=0,tn=1;

char s[1000],p;

cin>>t;

while(t>0){
cin>>s;
cout<<tn<<": ";
tn++;
z=0,kl=0,kn=0,m=0,ml=0,km=0;

for(i=0;i<strlen(s);i++){

z=s[i]-'A';

if(z<0 || z>25){
switch(s[i]){
case'_':z=26;break;
case'.':z=28;break;
case',':z=27;break;

    case'?':z=29;break;
}

}

xl[kl]=l[z];

kl++;

ml=l[z];

m=zn[z];

while(m>0){

num[kn+ml]=m%10;

ml--;

m=m/10;

}

kn+=l[z];

}

ml=1;

for(i=kl-1;i>=0;i--){

m=xl[i];

km=0;

while(m>0){

km+=num[ml]*po(m-1);

ml++;

m--;

}

z=fn[km];

if(z>=0 && z<26){

p='A'+z;

cout<<p;

}

else{
switch(z){

    case 26:cout<<"_";break;
case 27:cout<<",";break;
case 28:cout<<".";break;
case 29:cout<<"?";break;

}

}

}

cout<<endl;

t--;

}

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: