这题只要读懂题就等于没难度了,完全照着题目给的公式模拟即可
要注意的就是末尾的多余空格。
/* author:jxy lang:C/C++ university:China,Xidian University **If you need to reprint,please indicate the source** */ #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #define INF 1E9 using namespace std; char org[80],t[20]; int calc() { int now=0; for(int i=0;t[i];i++) now=(now<<5)+t[i]-'a'+1; return now; } int w[20]; int main() { int C,pos,len,n,now,i,j,a,b; while(gets(org)!=NULL) { if(org[0]=='\0')break; C=INF;pos=-1;n=0; len=strlen(org); while(++pos<len) { if(!isalpha(org[pos]))continue; //跳过空格 if(sscanf(org+pos,"%s",t)==0)break;//这句话木有用…… w[n++]=calc(); C=min(C,w[n-1]); pos+=strlen(t); } bool flag=1; while(flag) { flag=0; for(i=0;i<n;i++) for(j=i+1;j<n;j++) { a=C/w[i];b=C/w[j]; if(a%n==b%n) { C=min((a+1)*w[i],(b+1)*w[j]); flag=1; } } } printf("%s\n%d\n\n",org,C); } }